go语言多箱环境配置
Go语言多箱环境配置
前言
在日常的开发过程中, 我们必然要使用多套环境来运行我们的代码, 比如dev, test, uat, prod等, 每个环境在软件开发周期的不同阶段承载着不同责任.
那么, 在我们的Go语言项目中, 我们项目中如何去实现各个环境的快速切换(即多箱环境的配置)?
引入Viper
Viper是一个为Go应用程序提供的全面配置解决方案,适用于各种配置需求和格式。支持主流的配置文件比如json, yaml, property等文件格式.具体可以参考这里: https://github.com/spf13/viper
定义配置文件和加载配置信息
// 加载配置文件path, err := os.Getwd()v := viper.New()v.SetConfigType("yml")v.AddConfigPath(path + "/resource/")
然后根据运行环境变量中的env变量,确定去读取对应的yml文件的内容, 比如env = dev, 则读取app-dev.yml,
switch env {case "local":// 本地开发环境v.SetConfigName(localPath)case "dev":// 读取dev环境v.SetConfigName(devPath)...}
然后读取配置以及Unmarshall内容,
err := v.ReadInConfig() //加载config内容var c Config = Config{}v.Unmarshal(&c)
这样c对象就可以完全解析出来了,
注意yaml文件里面对应的字段要和Config的字段一一对应才能正确解析, 推的config定义以及yaml的定义参考如下:
type Config struct {MongoConf MongoConnQuota....}type MongoConnQuota struct {// 连接信息Uri stringAuthSource stringUsername stringPassword stringMaxPoolSize uint64MinPoolSize uint64}
对应的yaml配置文件的内容:
Mongo:Uri: xxx:xxx(port)AuthSource: xxxxUsername: xxxxPassword: xxxxMaxPoolSize: 100MinPoolSize: 5
这样就整体实现了,通过viper箱环境的配置了.
最后的补充
Go语言里面如何env如何配置, 其实go的SDK里面已经提供了flag这个工具用来解析运行命令行的参数. flag包见 https://pkg.go.dev/flag
项目代码里面的env参数解析如下:
env := "local"// flag 命令获取运行参数中的envflag.StringVar(&env, "env", env, "根据不同的环境加载不同配置文件(dev开发, test 测试, pro 生产)")flag.Parse()
收录于合集 #golang开发
14个上一篇Go 语言踩坑之类型推断(:=)
低配全栈
关注公众号后可以给作者发消息

浙公网安备 33010602011771号