新建配置文件
config/config.yaml
dev:
db:
mongodb:
uri: "mongodb://localhost:27017"
database-name: "db-name"
prod:
db:
mongodb:
uri: "mongodb://username:password@localhost:27017"
database-name: "db-name"
新建配置加载类
config/config.go
package config
import (
"gopkg.in/yaml.v3"
"log"
"os"
)
type Mongodb struct {
Uri string `yaml:"uri"`
DatabaseName string `yaml:"database-name"`
}
type Db struct {
Mongodb Mongodb `yaml:"mongodb"`
}
type Config struct {
Db Db `yaml:"db"`
}
type Env struct {
Config map[string]Config `yaml:",inline"`
}
var Cfg *Config
func init() {
envName := os.Getenv("env")
if envName == "" {
log.Printf("未获取到启动环境变量")
envName = "dev"
}
configPath := "config/config.yaml"
configFile, err := os.ReadFile(configPath)
if err != nil {
log.Fatal("读取配置文件错误!", err)
}
var env Env
if err = yaml.Unmarshal(configFile, &env); err != nil {
log.Fatal("加载配置文件错误!", err)
}
config := env.Config[envName]
Cfg = &config
log.Printf("配置加载成功 %+v\n", Cfg)
}
使用配置
main.go
package main
import (
"log"
"project_name/config"
)
func main() {
log.Printf("mongoDb配置:%+v", config.Cfg.Db.Mongodb)
}
通过设置系统的env环境变量即可实现切换配置的效果(可在生产部署脚本里面手动设置环境变量等方式实现)