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