使用 Go 开发应用的时候,有时会遇到需要读取静态资源的情况。比如开发 Web 应用,程序需要加载模板文件生成输出的 HTML。在程序部署的时候,除了发布应用可执行文件外,还需要发布依赖的静态资源文件。这给发布过程添加了一些麻烦。既然发布单独一个可执行文件是非常简单的操作,就有人会想办法把静态资源文件打包进 Go 的程序文件中。下面就来看一些解决方案:

go-bindata
pugo
go get -u github.com/jteeuwen/go-bindata/...
...go-bindata$GOPATH/binPATH
go-bindata
go-bindata -o=app/asset/asset.go -pkg=asset source/... theme/... doc/source/... doc/theme/... 
-oapp/asset/asset.go-pkg=assetasset.gopackage asset

pugo 里释放静态文件的代码:

 

asset.go

-debug 开发模式

go-bindata
go-bindata -debug -o=app/asset/asset.go -pkg=asset source/... theme/... doc/source/... doc/theme/... 
-debug
http.FileSystem
http.FileSystemgo-bindataasset.go

 

http://localhost:12345sourcethemedoc
go.rice
go-bindatago.rice
go-bindata
go get github.com/GeertJohan/go.rice/...
go.ricerice.Box

 

rice 命令

go.ricericerice embed-go
rice embed-go
rice -i "github.com/fuxiaohei/xyz" embed-go // -i 处理指定包里的 go.rice 操作
rice-box.gogo.riceimportgo.rice-i

http.FileSystem

go.ricehttp.FileSystem

 

rice.FindBox(dir)
eschttp.FileSystemesc
esc
go get github.com/mjibson/esc
go-bindata
// 注意 esc 不支持 source/... 三个点表示所有子目录
go-bindata -o=asset/asset.go -pkg=asset source theme doc/source doc/theme
http.FileSystem

 

escgo-bindataasset.RestoreDir()
pugo

 

在编译的时候执行:

go generate && go build
go generate
总结
pugogo.riceescgo-bindatago-bindatago.riceescgo-bindataesc