- 本来是用
yaml
格式的配置文件, 配合viper
使用很简单, 但是读取值得时候有点麻烦, 于是想读取json
格式然后直接反序列化到定义好的结构体中
问题: 怎么都读取不到配置文件数据
解决: 很无语,看代码; 必须点读取,才能反序列化
package parsecfg
import (
"fmt"
"os"
"github.com/spf13/viper"
)
// GlobalConfig 全局配置
var GlobalConfig EnvCfg
// EnvCfg app 基本设置
type EnvCfg struct {
Debug bool
DbType string
Port string
AllowCrossDomain bool
Mysql MysqlCfg
Redis RedisCfg
}
// MysqlCfg mysql配置
type MysqlCfg struct {
Write MysqlWriteCfg
Read MysqlReadCfg
}
// MysqlWriteCfg mysql配置
type MysqlWriteCfg struct {
Host string
DataBase string
Port string
PreFix string
User string
PassWord string
SetMaxIdleConns int
SetMaxOpenConns int
ChatSet string
}
// MysqlReadCfg mysql配置
type MysqlReadCfg struct {
Host string
DataBase string
Port string
PreFix string
User string
PassWord string
SetMaxIdleConns int
SetMaxOpenConns int
ChatSet string
}
// RedisCfg redis配置
type RedisCfg struct {
Host string
Port string
MaxIdle int
MaxActive int
}
func init() {
path, _ := os.Getwd()
cfg := viper.New()
viper.WatchConfig()
cfg.AddConfigPath(path + "/config")
cfg.SetConfigName("cfg")
cfg.SetConfigType("json")
if err := cfg.ReadInConfig(); err != nil { // 必须 先 读取 `ReadInConfig`
panic(err)
}
if err := cfg.Unmarshal(&GlobalConfig); err != nil { // 才能反序列化到 结构体里面
panic("读取配置文件出错")
}
fmt.Println(GlobalConfig)
}
- 最后,我 也是简单搜索 博文来看看
viper
使用方法的, 但是由于自己仅仅是想反序列化到结构体中, 所以只是直接反序列化 才出现了这个问题.
有疑问加站长微信联系(非本文作者)