七叶笔记 » golang编程 » 「Golang」将静态文件打包到二进制

「Golang」将静态文件打包到二进制

前言:经常写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,这个包宣传的多么好,结果使用起来问题非常多,果断换之。

参考资料:

相关文章