Go 将配置文件打包进二进制

有的时候,需要将资源文件,类似java的resource一样打包进二进制文件,在执行的时候就不需要关心路径不对而找不到的问题
本帖使用 go-bindata 打包

工程目录结构

XXXX
├── resources
│   ├── core-site.xml
│   └── hdfs-site.xml
├── hadoopconf
│   ├── hadoopconf.go
│   ├── hadoopconf_test.go
│   ├── myres.go

首先安装此包

go get -u github.com/jteeuwen/go-bindata/...   # golang
go-bindata   #执行此命令验证安装成功与否

#如果命令执行失败,则
echo $GOPATH/bin   #查看gopath/bin目录是否有go-bindata可执行文件
cp $GOPATH/bin/go-bindata  /bin

新建一个 resource 文件夹,放置需要打包的文件,以core-site.xml为例。执行

go-bindata -o=myres.go  resource

打开myres.go文件,会发现里面生成许多函数,其中重要的是Asset函数

// Asset loads and returns the asset for the given name.
// It returns an error if the asset could not be found or
// could not be loaded.
func Asset(name string) ([]byte, error) {
	cannonicalName := strings.Replace(name, "\\", "/", -1)
	if f, ok := _bindata[cannonicalName]; ok {
		return f()
	}
	return nil, fmt.Errorf("Asset %s not found", name)
}

将生成的myres.go移动到和使用的地方同一个包下,代码里就不需要解决导包问题,在使用的地方只需

// 需要使用的地方执行Assert,之后即可解析
pList := propertyList{}
f, err := Asset("resource/core-site.xml")
err = xml.Unmarshal(f, &pList)

编译后的二进制就能读到resource文件下的文件,随处使用,不用关心配置文件找不到

go build -ldflags "-X main.version=1.0.0" xxx

参考文献
https://github.com/jteeuwen/go-bindata
https://c.isme.pub/2019/01/10/go-static/
https://liqiang.io/post/package-static-file-with-golang
https://blog.csdn.net/lampqiu/article/details/48649881
https://blog.csdn.net/idwtwt/article/details/81180460

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值