本文主要介绍了Golang如何打包配置文件,具有一定的参考价值。有兴趣的朋友可以参考一下。希望大家看完这篇文章后有很多收获。让边肖带你去了解一下。
00-1010最近写了一个与管理阿里巴巴云ECS相关的CLI工具。这里当然要考虑阿里巴巴云资源的安全性。要求阿里巴巴云账号的访问密钥Id和访问密钥集不能分发给CLI工具的用户。
因此,这里我们选择将一个包含访问密钥和访问密钥集的配置文件打包到命令行界面工具中。默认情况下,命令行界面工具的用户将使用打包的配置文件。当然,他们也可以通过指定配置文件或传递参数来使用新的配置信息。
00-1010
背景
这里有一个Golang的库,Go-Binata,可以将任意文件转换成Go代码,可以用来将二进制文件嵌入到Go程序中。同时,它还支持在转换为原始字节片之前使用gzip压缩文件数据。
这个工具的具体介绍请跳转到https://github.com/go-bindata/go-bindata。
00-1010使用go-bindata工具将包含敏感信息的配置文件转换为go的源代码。下面是项目Makefile的一部分,工具名是mycli。
名称=mycli
CONFIG=configs/config.yaml
. PHONY:build
build:
cp$(CONFIG)config.yaml
mkdir-pcmd/mycli/asset
go-bindata-pkgasset-ocmd/my CLI/asset/asset . go \
脚本/.\
config.yaml
CGO _ ENABLED=0 GOOS=LinUxGoarch=amd 64 obuild-obin/Linux/my clicmd/my CLI/*。去
CGO _ ENABLED=0GOOS=Darwangoarch=amd64 obuild-obin/Darwin/my clicmd/my CLI/*。去
chmod x./bin/linux/mycli。/bin/darwin/mycli
rm-fconfig.yamlmycli
将文件转换为Go源代码的部分如下:
go-bindata-pkgasset-ocmd/my CLI/asset/asset . go \
脚本/.\
go-bindata命令行工具选项的描述:
-pkg指定包名,调用将被写入asset。资产(‘ config.yaml ‘)
-o指定生成的Go源代码的存储位置。
生成的asset.go代码如下:
//Codegeneratedbygo-bindata。
//脚本/create.sh
//scripts/sub/delete.sh
//config.yaml
//DONOTEDIT!
packageasset
funcbindataRead(数据[]字节,名称字符串)([]字节,错误){ 0
.
}
typesassetstruct {
字节[]字节
infoos。文件信息
}
typebindataFileInfostruct(
名称字符串
sizeint64
莫多斯。文件模式
modTimetime。时间
}
func(fibindataFileInfo)名称(字符串){ 0
returnfi.name
}
func(FiBindatafileinfo)Size()int 64
returnfi.size
}
功能模式。文件模式{
returnfi.mode
}
func(FiBindatafileinfo)ModTime()time。时间{
returnfi.modTime
}
func(FiBindataFileInfo)IsDir(bool ){ 0
returnfalse
}
func(fibindataFileInfo)Sys()接口{ } { 0
返回零
}
.
实现
使用资产方法加载打包的配置文件:
constpraloadconfigfile=’ config . YAML ‘
typeConfigstruct { 0
.
}
funcproadconfig()(* Config,错误){ 0
b,err:=资产。资产(预加载配置文件)
伊弗。=零
返回零,fmt。错误f(‘failedtoreadconfig:%v ‘,错误)
}
varconfig*Config
err=yaml。取消标记(b,配置)
returnconfig,错误
}感谢您仔细阅读本文。希望边肖分享的文章《如何在Golang打包配置文件》对大家有所帮助。同时希望大家多多支持,关注行业信息渠道,多了解!