Golang嵌入静态资源文件

作者:matrix 发布时间:2026-02-28 分类:Golang

go:embed

推荐使用官方embed特性解决,要求GO1.16+

//go:embed static/*
var staticFiles embed.FS

func main() {
    data, _ := staticFiles.ReadFile("static/index.html")
    fmt.Println(string(data))
}

go:embed注释必须声明,编译时Golang会自动打包对应路径static/*的文件
最终使用声明的staticFiles拿到即可

statik

对比官方embedstatik会更麻烦一些。好处是会把静态资源打包为go文件,最后编译时嵌入到二进制中

手动打包

# 本地安装statik
$ go install github.com/rakyll/statik@latest

# 执行打包 -src参数指定目录   输出到项目本地fego目录
$ statik -src="~/Downloads/dist" -dest=./fego -f

指定读取

statikFs "github.com/rakyll/statik/fs"
_ "PROJECT/fego/statik" // 注册statik文件: 项目本地fego目录


// 配置 statik 文件系统
var statikFS http.FileSystem
statikFS, err := statikFs.New()
if err != nil {
    log.Fatal(err)
}

// 打开文件
file, err := statikFS.Open(filePath)
if err != nil {
    // 如果文件不存在,返回 404
    c.String(http.StatusNotFound, "File not found")
    return
}
defer file.Close()