2 回答
TA贡献1820条经验 获得超9个赞
嵌入式目录中的文件路径以 //go:embed 指令中使用的路径为前缀。索引.html的嵌入式文件系统路径为 。spa/index.html
创建一个根植于该目录的子文件系统,并为该文件系统提供服务。子文件系统 中的 路径为 。spa
index.html
index.html
sub, _ := fs.Sub(spa, "spa") r.Handle("/", http.FileServer(http.FS(sub)))
这种方法适用于任何多路复用器,包括大猩猩多路复用器。这是大猩猩的代码,其中是:r
*mux.Router
sub, _ := fs.Sub(spa, "spa") r.PathPrefix("/").Handler(http.FileServer(http.FS(sub)))
TA贡献1895条经验 获得超3个赞
使用Gorilla Mux,您需要指定路径前缀:
package main
import (
"embed"
"fmt"
"github.com/gorilla/mux"
"log"
"net/http"
)
//go:embed spa
var spa embed.FS
func main() {
log.Println("starting api server")
r := mux.NewRouter()
r.PathPrefix("/spa/").Handler(http.StripPrefix("/", http.FileServer(http.FS(spa))))
log.Fatal(http.ListenAndServe(":8090", r))
}
这会将请求路由到处理程序。然后,您必须剥离前缀,因为目录的内容具有不带前导符的前缀:<host>/spa/*/spaspa//
b, _ := spa.ReadFile("spa/index.html")
fmt.Println(string(b)) // file contents
总结一下:
http://localhost:8090/spa/index.html路由到处理程序。虽然路由是 ,但去掉第一个结果,这最终与嵌入变量中的文件路径匹配。r.PathPrefix("/spa/")/spa/index.html/spa/index.html
- 2 回答
- 0 关注
- 85 浏览
添加回答
举报