现在的很多程序都会提供一个 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 包提供静态资源的访问服务,关键部分代码如下: