前言
在Go语言中,能够应用embed包嵌入动态文件。embed包是Go 1.16版本引入的个性,它反对将动态文件打包到可执行程序中,这样就不用内部依赖资源文件了。
用途举例:go联合html打包桌面利用
用法
1.文件目录:
|- main.go|- web |- index.html |- assets |- index.js |- index.css
2.go文件
package mainimport ( "embed" "fmt" "net/http")//go:embed web/index.htmlvar staticFiles embed.FS//go:embed web/assets/*var assetsFiles embed.FSfunc main() { http.HandleFunc("/", serveIndex) files, err := assetsFiles.ReadDir("web/assets") if err != nil { panic(err) } for _, file := range files { fileName := file.Name() fmt.Println("/assets/" + fileName) http.HandleFunc("/assets/"+fileName, handleAssets(fileName)) } fmt.Println("Listen:8080...") err = http.ListenAndServe(":8080", nil) if err != nil { fmt.Println(err.Error()) }}func serveIndex(w http.ResponseWriter, r *http.Request) { indexHTML, err := staticFiles.ReadFile("web/index.html") if err != nil { http.Error(w, "404 Not Found", http.StatusNotFound) return } fmt.Fprintf(w, string(indexHTML))}func serveStatic(w http.ResponseWriter, r *http.Request) { staticServer := http.FileServer(http.FS(assetsFiles)) http.StripPrefix("/assets/", staticServer).ServeHTTP(w, r)}func handleAssets(fileName string) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { indexHTML, err := assetsFiles.ReadFile("web/assets/" + fileName) if err != nil { // http.Error(w, "404 Not Found", http.StatusNotFound) fmt.Println(err.Error()) return } fmt.Fprintf(w, string(indexHTML)) }}
3.调试
拜访:http://localhost:8080/
查看html,js,css文件是否被正确援用