| 12345678910111213141516171819202122232425262728293031323334 |
- 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)
- }
|