# go-config **Repository Path**: jishulang/go-config ## Basic Information - **Project Name**: go-config - **Description**: golang读取yaml、yml、json、toml文件配置,也可同时读取ENV环境变量。 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-08-11 - **Last Updated**: 2025-10-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # go-config #### 介绍 golang读取yaml、yml、json、toml文件配置,也可同时读取ENV环境变量。 #### 使用说明 ###### NewConfig ```go package main import ( "fmt" config "gitee.com/jishulang/go-config" ) type ConfigDto struct { MysqlCnf config.MysqlCnfDto RedisCnf config.RedisCnfDto // Port int `env:"port" required:"false"` // int类型值是0时,设置required为true时会报错`required` Port2 int64 `env:"port2"` Enabled bool `env:"enabled"` // bool类型没必要设置required标签 Version float64 `env:"version"` Test struct { T1 string `env:"TestT1"` T2 string T3 string Test2 struct { T1 string T2 string T3 string `required:"false"` } `required:"required"` // 这里设置的required标签不会验证 } `yaml:"test"` } var conf ConfigDto func init() { config.NewConfig(&conf, config.CONFIG_TYPE_JSON) //CONFIG_TYPE_YAML、CONFIG_TYPE_YML、CONFIG_TYPE_JSON、CONFIG_TYPE_TOML // config.NewConfigYaml(&conf) // config.NewConfigYml(&conf) // config.NewConfigJson(&conf) // config.NewConfigToml(&conf) } func main() { fmt.Println(conf) } ``` ```sh # 更新依赖 go mod tidy # 运行main ``` 程序初次运行会在根目录生成相关配置文件: ```sh -|config --|.env # 开发时用变量文件 --|.env.dev # 开发环境用变量文件 --|.env.local # 本地环境用变量文件 --|.env.prod # 正式环境用变量文件 --|.env.uat # 测试环境用变量文件 --|settings.json # 开发时用配置文件 --|settings_dev.json # 开发环境用配置文件 --|settings_local.json # 本地环境用配置文件 --|settings_prod.json # 正式环境用配置文件 --|settings_uat.json # 测试环境用配置文件 ``` ###### settings使用 默认取settings文件的配置 若Environment配置了,优先取对应环境的settings文件 ```yaml # .env Environment=dev # settings.yaml mysqlcnf: host: "127.0.0.1" port: 111111 user: "root" pwd: "123456" dbname: "test" charset: "utf-8" debug: false # settings_dev.yaml mysqlcnf: debug: true rediscnf: host: "" port: 0 pwd: "" db: 0 debug: false ###### 最终取得配置 ###### conf: { "MysqlCnf": { "Host": "127.0.0.1", "Port": 111111, "User": "root", "Pwd": "123456", "DbName": "test", "Charset": "utf-8", "Debug": true #注意:这里优先取dev的配置 }, "RedisCnf": { "Host": "", "Port": 0, "Pwd": "", "DB": 0, "Debug": false }, } ``` ###### env使用 ```yaml # 结构体定义 type ConfigDto struct { Port int `env:"port"` # 这里指定取环境变量port值 } # .env port=1234 # settings.yaml port: 5678 ###### 最终取得配置 ###### { "Port": 1234 } ``` .env各文件只是存放各环境的变量。 在生产环境中,建议不要使用 `.env` 文件,而是使用更安全的方法来管理环境变量,例如使用环境变量管理工具或者容器化你的应用并使用 Docker secrets 或 Kubernetes secrets。 生产环境物必确认Environment值。 #### 常见问题 ###### 若在IDE上运行,如果配置了`required:"true"` ,会报panic,须导入环境变量 ```sh # 安装EnvFile插件 File =》 Settings =》 Plugins => Marketplace => 搜索`EnvFile` =》 安装。 # 导入.env文件 Edit Configurations =》 EnvFile => 勾选Enable EnvFile =》 Add => 选择项目根目录的`config/.env`文件 或 其它.env环境文件。 ``` #### 引用的三方包 ```json gitee.com/jishulang/go-fun v0.0.3 github.com/BurntSushi/toml v1.4.0 github.com/pelletier/go-toml/v2 v2.2.2 gopkg.in/yaml.v3 v3.0.1 ``` #### 待解决问题 1. 变更结构体后不会更新配置文件