前言

在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文件是否被正确援用