Golang嵌入静态资源文件
作者:matrix 发布时间:2026-02-28 分类:Golang
go:embed
//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
对比官方embed,statik会更麻烦一些。好处是会把静态资源打包为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()