现在的很多程序都会提供一个 Dashboard 类似的页面用于查看程序状态并进行一些管理的功能,通常都不会很复杂,但是其中用到的图片和网页的一些静态资源,如果需要用户额外存放在一个目录,也不是很方便,如果能打包进程序发布的二进制文件中,用户下载以后可以直接使用,就方便很多。
最近在阅读 InfluxDB 的源码,发现里面提供了一个 admin 管理的页面,可以通过浏览器来执行一些命令以及查看程序运行的信息。但是我运行的时候只运行了一个 influxd 的二进制文件,并没有看到 css, html 等文件。
原来 InfluxDB 中使用了 statik 这个工具将静态资源都编译进了二进制文件中,这样用户只需要运行这个程序即可,而不需要管静态资源文件存放的位置。
安装
先下载并安装 statik 这个工具
go get -d github.com/rakyll/statik
go install github.com/rakyll/statik
$GOPATH/bin
创建测试项目
$GOPATH/src/test/testStatikFS
./assets/a./assets/tmp/baaabbb
创建 main.go 文件,代码如下:
注意文件最开始的两行
go generatego generate
/tmp/b
将静态资源打包成 go 文件
go generate
./assets
编译
go build -o test ./main.go
在 main.go 中我们 import 了两个包
go generateinit()init()_
运行
./test
./assets/tmp/b
文件系统接口
由于 statik 实现了标准库中的 http.FileSystem 接口,所以也可以直接使用 http 包提供静态资源的访问服务,关键部分代码如下: