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 string AuthSource string Username string Password string MaxPoolSize uint64  MinPoolSize    uint64}

对应的yaml配置文件的内容:

Mongo:  Uri: xxx:xxx(port)  AuthSource: xxxx  Username: xxxx  Password: xxxx  MaxPoolSize: 100  MinPoolSize: 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 语言踩坑之类型推断(:=)
阅读 149
低配全栈
 
 
关注公众号后可以给作者发消息
 
 
 
 
 
posted @ 2023-12-07 08:53  技术颜良  阅读(208)  评论(0)    收藏  举报