Golang 配置管理神器Viper
在專案中 有許多地方都需要配置 ,但在眾多的地方 如果沒有一個檔案能管理全部的設定 ,但人工總不可能記得這麼多,因此找了一套golang 配置管理器 。
此次用到的套件是 viper
viper 有支援多個配置分類 JSON, TOML, YAML, HCL, envfile … 等,而本文選擇使用toml ,主要是覺得很直觀 也很好配置 ,而配置範本如下 可以很直觀地看到 現在要配置哪個。
addr = "0.0.0.0:8888"
jwttoken= "fjklbaj1t"
model = "debug" # debug or release
[Mysql]
host = "127.0.0.1"
port = 3306
name = "root"
password = 123456
dbName = "test_db"
[Redis]
host = "127.0.0.1"
port = 6379
而項目目錄 會像是這樣
├── main.go
├── pkg
│ ├── config
│ │ └── viper.go
代碼如下
先將配置分類,每一個分類定義一個struct ,之後再透過 init 自動加載即可透過全局 config.GetConfig.* 取得配置資訊。
package config
import (
"github.com/spf13/viper"
)
type ServerConfig struct {
Addr string `mapstructure:"addr"`
JwtToken string `mapstructure:"jwttoken"`
Mysql MysqlConfig `mapstructure:"mysql"`
//RedisInfo RedisConfig `mapstructure:"redis"`
//LogsAddress string `mapstructure:"logsAddress"`
}
type MysqlConfig struct {
Host string `mapstructure:"host"`
Port int `mapstructure:"port"`
Name string `mapstructure:"name"`
Password string `mapstructure:"password"`
DbName string `mapstructure:"dbName"`
}
type RedisConfig struct {
Host string `mapstructure:"host"`
Port int `mapstructure:"port"`
}
var envInit *ServerConfig
func init() {
viper.SetConfigFile("env.toml")
if err := viper.ReadInConfig(); err != nil {
panic(err)
}
envInit = &ServerConfig{}
if err := viper.Unmarshal(&envInit); err != nil {
panic(err)
}
}
func GetConfig() *ServerConfig {
return envInit
}