golang viper 使用记录: 读取不到配置文件json

  • 本来是用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()
    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("读取配置文件出错")
    }
    viper.WatchConfig()
    fmt.Println(GlobalConfig)
}

  • 最后,我 也是简单搜索 博文来看看viper使用方法的, 但是由于自己仅仅是想反序列化到结构体中, 所以只是直接反序列化 才出现了这个问题.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容