在开发 yoz-comment 评论系统中为了方便部署,在部署的过程中实现单文件无依赖发布,就在想是否可以将静态文件一同编译进应用中;在搜索后找到了 go-bindata ,为了很方便于 web 应用,最后选择以 go-bindata 为依赖的 go-bindata-assetfs。
话不多说,直接尝试
安装
go get -u github.com/go-bindata/go-bindata/...
go get github.com/elazarl/go-bindata-assetfs/...
-
go-bindata 是一个工具,将静态文件生成为 go 代码,文件以 byte 数组的形式存在。
-
go-bindata-assetfs 是文件系统接口的实现,从生成的 go 文件中拿文件数据。
使用
go-bindata-assetfs -o static/static.go -pkg=static static_data/...
-
无标签传参指的是 需转换的文件,
-
-o指转换后导出文件位置,默认为./bindata.go -
-pkg指导出的包名,默认为main -
-ignore [regexp value]正则文本忽略匹配文件 如:-ignore "\\.DS_Store|package.json" -
-debug指调试模式,生成的包并不会嵌入文件,而是直接硬盘读取文件,方便前端热更新调试。 -
基础示例
package main
import (
"project/statics"
"net/http"
assetfs "github.com/elazarl/go-bindata-assetfs"
)
func main() {
// 重新实现文件接口
staticFS := assetfs.AssetFS{
Asset: statics.Asset,
AssetDir: statics.AssetDir,
AssetInfo: statics.AssetInfo,
Prefix: "static_data", // 访问路由index.html => 指向文件 static_data/index.html
Fallback: "index.html",
}
http.Handle("/", http.FileServer(&staticFS))
http.ListenAndServe(":8080", nil)
}
- Gin 示例
package main
import (
"project/statics"
"net/http"
assetfs "github.com/elazarl/go-bindata-assetfs"
"github.com/gin-gonic/gin"
)
func main() {
engine := gin.Default()
// 通过 go-bindata-assetfs 提供的函数将静态资源
staticFS := assetfs.AssetFS{
Asset: statics.Asset,
AssetDir: statics.AssetDir,
AssetInfo: statics.AssetInfo,
Prefix: "static_data", // 访问路由index.html => 指向文件 static_data/index.html
Fallback: "index.html",
}
engine.StaticFS("/", &staticFS) //配置静态资源文件路由
engine.Run(":8080")
}