GO项目多环境配置

414 阅读1分钟

本文介绍Go项目如何进行多环境配置。在保证各环境所对应的分支代码一致的情况下,实现每个环境读取各自环境的配置信息。

背景

我们开发基于springboot的java项目的时候,会在resource目录下保存不同环境的配置文件。

image.png

然后在每个服务不同环境的deployment.yaml配置文件中,配置spring.profiles.active来激活相应的配置信息。

--spring.profiles.active=dev

那一个基于Gin的Web框架的Go项目如何实现相同的功能呢?

配置步骤

添加不同环境的配置文件

我们在项目根目录的某一个目录下添加toml格式的配置文件。

image.png

deployment.yaml中配置不同的环境变量

image.png

代码根据环境变量读取相应的配置文件数据

Viper是适用于Go应用程序(包括Twelve-Factor App)的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。

func GetEnvInfo(env string) string {
   viper.AutomaticEnv()
   return viper.GetString(env)
}

func LoadConfig(confDirs []string) {

   fmt.Println(GetEnvInfo("ENV"))
   viper.SetConfigName(GetEnvInfo("ENV"))
   viper.SetConfigType("toml")
   for _, confDir := range confDirs {
   	viper.AddConfigPath(confDir)
   }
   err := viper.ReadInConfig()
   if err != nil {
   	panic(err)
   }
   MysqlConfig = mysqlConfig{
   	Host:     viper.GetString("mysqlDb.host"),
   	Username: viper.GetString("mysqlDb.username"),
   	Password: viper.GetString("mysqlDb.password"),
   	Database: viper.GetString("mysqlDb.database"),
   }

LoadConfig方法传入配置文件所在的目录; 上面代码SetConfigName配置的值就是我们在deployment.yaml里配置的环境变量,也就是dev、stg、prod;SetConfigType设置文件的类型是toml。 那么viper就会找到找到配置文件,然后加载配置。通过 viper.GetString就能获取到各种配置数据。具体请查看viper说明文档。

参考文章

juejin.cn/post/698329…

www.liwenzhou.com/posts/Go/vi…