golang 多环境配置切换

本文以MongoDB配置为例,介绍在Golang中根据系统环境变量进行配置切换的方法。包括下载依赖、新建配置文件config/config.yaml、新建配置加载类config/config.go,以及在main.go中使用配置,通过设置系统env环境变量实现配置切换。

本文中以mongodb配置举例,根据系统环境变量进行配置切换,其他配置也是类似的方式

下载依赖

go get gopkg.in/yaml.v3

新建配置文件

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值