本文介绍Go项目如何进行多环境配置。在保证各环境所对应的分支代码一致的情况下,实现每个环境读取各自环境的配置信息。
背景
我们开发基于springboot的java项目的时候,会在resource目录下保存不同环境的配置文件。
然后在每个服务不同环境的deployment.yaml配置文件中,配置spring.profiles.active来激活相应的配置信息。
--spring.profiles.active=dev
那一个基于Gin的Web框架的Go项目如何实现相同的功能呢?
配置步骤
添加不同环境的配置文件
我们在项目根目录的某一个目录下添加toml格式的配置文件。
deployment.yaml中配置不同的环境变量
代码根据环境变量读取相应的配置文件数据
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说明文档。