golang 根据环境变量加载配置

发布时间:2023-09-22 10:32:33
修改时间:2025-04-29 15:28:33
总阅读数:172
今日阅读数:0
昨日阅读数:0
字数:1494

新建配置文件

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环境变量即可实现切换配置的效果(可在生产部署脚本里面手动设置环境变量等方式实现)