前言:经常写java应用,大家都知道的是打成jar包,把静态文件都直接最后以一个xxx.jar包展现。在运行的时候也特别方便。那么go其实也有这样的操作。
了解目前开源的包
- go-bindata
- packcr
- statik
目前是这三种
推荐statik进行开发流程清晰明了,基本上看一眼就可以用。
其实核心思想都是将静态文件转换为.go文件,然后再通过import将包导入进去
开始使用 #安装
go get github.com/rakyll/statik
#查看安装结果
statik --help
- 建立test文件夹,在文件夹内分别建立 main.go和a.json
#main.go
package main
import (
_ "./statik" //注意该包,该包非手动创建,由static命令进行创建
"fmt"
"github.com/rakyll/statik/fs"
"io/ioutil"
"log"
)
func main() {
staticFile, err := fs.New()
if err != nil {
log.Fatal(err)
}
f, err := staticFile.Open("/a.json")
if err != nil {
log.Fatal(err)
}
defer f.Close()
contents, err := ioutil.ReadAll(f)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(contents))
}
#a.json
{"a": 1}
- static命令,将静态文件生成.go的包文件
#执行static的静态文件转换命令
static -src=./ -include=a.json
# -src默认是public目录
# -include 如果不写,默认目录全部文件
# 执行完上述命令会在当前文件夹产生 static/static.go 此文件就是main.go的注释部分
- 编译
#在当前命令行
go build
ls
#执行可执行文件
./test
#结果
{"a": 1}
- 测试
#将可执行文件移动到其它地方
mv test /xxxx
#执行
./test
#结果
{"a": 1}
到此就结束了。核心思想在推荐的时候描述了。
总结快速解决自己想要的,之前使用packcr,这个包宣传的多么好,结果使用起来问题非常多,果断换之。
参考资料: