package main import ( "embed" "io/fs" "net/http" ) // 静态页面独立放在 web/ 目录, 用 embed.FS 打进 exe 的资源区 —— // 编译产物自带 UI: 不再依赖运行目录, 也不会把工作目录里的其它文件顺带暴露出去。 // //go:embed web var webFS embed.FS // webRoot 返回 web/ 子文件系统 (去掉 "web" 这一层前缀)。 func webRoot() fs.FS { sub, err := fs.Sub(webFS, "web") if err != nil { return webFS } return sub } // homeH 返回单页应用首页。页面已烧进二进制, 直接读 embed 即可。 func homeH(w http.ResponseWriter, r *http.Request) { b, err := fs.ReadFile(webFS, "web/index.html") if err != nil { http.Error(w, "web/index.html 未嵌入: "+err.Error(), http.StatusInternalServerError) return } w.Header().Set("Content-Type", "text/html; charset=utf-8") w.Header().Set("Cache-Control", "no-store, no-cache, must-revalidate") _, _ = w.Write(b) }