本文最后更新于 2025年2月05日, 如有失效请评论区留言。
前言
在团队开发中, 每个人的本地环境配置, 或有不同. 如果每个人的配置文件, 都临时改成本地的, 当pull
的配置文件有所变动时, 又要撤回自己的变更, 再pull
, 再修改.就会显得很不优雅.
实操
新建一个.env
文件, 并将其添加到.gitignore
来不希望 Git 跟踪, 然后在viper
加载配置的时候, 使用godotenv
将.env
文件Load
到环境变量中, 再通过viper
读取环境变量即可.
安装godotenv
库
go get -u github.com/joho/godotenv
使用godotenv.Load(".env")
即可将配置加载到环境变量中
config.go
var Conf *AppConfig
type AppConfig struct {
Name string `mapstructure:"name"`
*MysqlConfig `mapstructure:"mysql"`
}
type MysqlConfig struct {
Host string `mapstructure:"host"`
Port int `mapstructure:"port"`
User string `mapstructure:"user"`
Password string `mapstructure:"password"`
Dbname string `mapstructure:"dbname"`
}
func InitConfig() (err error) {
// 加载 .env 文件中的配置到环境变量
// 如果是嵌套的结构体配置, 文件中参数命名格式: 以.连接(如MYSQL.HOST)
godotenv.Load("../.env")
v := viper.New()
v.SetConfigFile("../configs/app.yml") // 指定配置文件路径
v.SetEnvPrefix("app") // 设置环境变量的前缀
v.AutomaticEnv() // 自动读取环境变量
...
return
}
app.yml
name: "go-web"
mysql:
host: "127.0.0.1"
port: 3306
user: "root"
password: "root"
database: "db"
.env
APP_MYSQL.HOST=xx.xx.xx.xx
APP_MYSQL.PORT=xxxx
APP_MYSQL.PASSWORD=xxxxx
将需要修改的配置写在.env
中即可
注意前缀 和 结构体嵌套时写法