前言:经常写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.gopackage mainimport (_ "./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 buildls#执行可执行文件./test#结果{"a": 1}
  • 测试
#将可执行文件移动到其它地方mv test /xxxx#执行./test#结果{"a": 1}

到此就结束了。核心思想在推荐的时候描述了。

总结

快速解决自己想要的,之前使用packcr,这个包宣传的多么好,结果使用起来问题非常多,果断换之。

参考资料:

https://github.com/rakyll/statik