这篇文章主要介绍了Golang如何打包配置文件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
背景
最近在写一个涉及到管理阿里云ECS的CLI工具,这里当然就要考虑阿里云资源使用的安全性了,要求阿里云账号的AccessKeyId和AccessKeySecret不能下发给CLI工具的使用者。
所以这里选择将一份包含AccessKeyId和AccessKeySecret的配置文件打包进了CLI工具中,CLI工具的使用者默认将使用已经打包了的配置文件,当然也可以通过指定配置文件或传递参数的方式使用新的配置信息。
实现
工具
这里将介绍Golang的一个可以把任意文件转换成去代码的库go-bindata,可以用于嵌入二进制文件到去程序中,同时,也支持在转换成原始的字节切片前使用gzip进行压缩文件数据。
关于该工具的具体介绍请跳转至https://github.com/go-bindata/go-bindata
打包
使用go-bindata工具将包含敏感信息的配置文件转换成去的源代码,下面是项目Makefile的部分内容,工具名称就叫mycli吧。
NAME =mycli 时间=CONFIG 配置/config.yaml .PHONY:构建 构建: ,,,cp 美元(配置),config.yaml ,,,mkdir -p cmd/mycli/资产 ,,,go-bindata -pkg asset -o cmd/mycli/资产/asset.go \ ,,,,,,,脚本/璡 ,,,,,,config.yaml ,,,, ,,,CGO_ENABLED=0,美好=linux GOARCH=amd64 go build -o bin/linux/mycli cmd/mycli/* .go ,,,CGO_ENABLED=0,美好=darwin GOARCH=amd64 go build -o 达尔文/bin/mycli cmd/mycli/* .go ,,,, ,,,chmod + x /bin/linux/mycli 。/bin/达尔文/mycli ,,,rm -f config.yaml mycli ,,,ln -s bin/linux/mycli mycli
其中将文件转换成去源代码的部分如下:
go-bindata -pkg asset -o cmd/mycli/资产/asset.go \ ,,,脚本/璡 ,,配置。yaml
关于go-bindata命令行工具的选项说明:
- <李>
包裹指定包名称,调用的写法将变成asset.Asset (“config.yaml")
李> <李>- o指定生成的去源代码存放的位置
李>生成的资产。去代码如下:
//,Code generated by go-bindata。//,来源://脚本/create.sh//脚本/子/delete.sh//config.yaml//,DO NOT 编辑! package 资产 func bindataRead (data []字节,name 字符串),([]字节,,错误),{ ,,,… } type asset  struct { bytes []字节 ,info os.FileInfo } type bindataFileInfo  struct { ,name ,字符串 ,size , int64 ,mode , os.FileMode modTime time.Time } func (fi bindataFileInfo),名称(),string { return fi.name } func (fi bindataFileInfo),大小(),int64 { return fi.size } func (fi bindataFileInfo),模式(),os.FileMode { return fi.mode } func (fi bindataFileInfo), ModTime (), time.Time { return fi.modTime } func (fi bindataFileInfo), IsDir (), bool { return 假 } func (fi bindataFileInfo),系统(),界面{},{ return nil } …
调用
使用资产方法进行加载打包好的配置文件:
const preloadConfigFile =,“config.yaml" type Config  struct { ,,,… } func PreloadConfig(),(*配置,,错误),{ ,,,,err b:=, asset.Asset (preloadConfigFile) ,,,if err !=, nil { ,,,,,,,return nil,, fmt.Errorf (“failed 用read 配置:,% v",,呃) ,,,} ,,,var config *配置 ,,,err =, yaml.Unmarshal (b,和配置) ,,,return 配置,犯错 }
感谢你能够认真阅读完这篇文章,希望小编分享的“Golang如何打包配置文件”这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!