账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    golang 多级toml解析
    36
    0

    因为在开发中使用toml进行配置,并使用了 viper 这多功能解析库来解析 toml配置文件。遇到 编组失败

    如 配置文件:

    [database]
    [database.db1]
    [database.db1.dev]
    driver = "mysql"
    dsn = "cusr:97tDudcd@tcp(192.168.6.182:3306)/hue?charset=utf8mb4&parseTime=true"
    maxOpenConns = 1000
    maxIdleConns = 200
    connMaxLifeTime = 50
    
    [database.db1.pro]
    driver = "mysql"
    dsn = "cusr:97tDudcd@tcp(192.168.6.182:3306)/hue?charset=utf8mb4&parseTime=true"
    maxOpenConns = 1000
    maxIdleConns = 200
    connMaxLifeTime = 50
    
    [database.db1.test]
    driver = "mysql"
    dsn = "cusr:97tDudcd@tcp(192.168.6.182:3306)/hue?charset=utf8mb4&parseTime=true"
    maxOpenConns = 1000
    maxIdleConns = 200
    connMaxLifeTime = 50
    
    
    [database.db2]
    [database.db2.dev]
    driver = "mysql"
    dsn = "cusr:97tDudcd@tcp(192.168.6.182:3306)/hue?charset=utf8mb4&parseTime=true"
    maxOpenConns = 1000
    maxIdleConns = 200
    connMaxLifeTime = 50
    
    [database.db2.dev]
    driver = "mysql"
    dsn = "cusr:97tDudcd@tcp(192.168.6.182:3306)/hue?charset=utf8mb4&parseTime=true"
    maxOpenConns = 1000
    maxIdleConns = 200
    connMaxLifeTime = 50
    
    [database.db3]
    [database.db3.dev]
    driver = "mysql"
    dsn = "cusr:97tDudcd@tcp(192.168.6.182:3306)/hue?charset=utf8mb4&parseTime=true"
    maxOpenConns = 1000
    maxIdleConns = 200
    connMaxLifeTime = 50
    
    # and more 后面还有 db4 db5 db6 。。。。

    使用 golang进行 解析:

    type singleConf struct {
        driver          string `toml:"driver"`
        dsn             string `toml:"dsn"`
        maxOpenConns    int    `toml:"maxOpenConns"`
        maxIdleConns    int    `toml:"maxIdleConns"`
        connMaxLifeTime int    `toml:"connMaxLifeTime"`
    }
    
    type envConf struct {
        dev singleConf
        pro singleConf
        test singleConf
    }
    
    type tomlConf struct {
        database map[string]envConf
    }
    
    var TomlConf tomlConf
    
    func init() {
        confDir, _ := filepath.Abs(path.Dir("."))
        confDir = confDir + "/conf/"
        fmt.Println(confDir)
        viper.AddConfigPath(confDir)
        viper.SetConfigType("toml")
        viper.SetConfigName("db")
        if err := viper.ReadInConfig(); err != nil {
            panic(err)
        }
        if err := viper.Unmarshal(&TomlConf); err != nil {
            panic(err)
        }
        fmt.Println(TomlConf.database)
    }
    

    打印之后 是 一个空的 map

    1
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 洋辣子 普通会员 1楼
      { "error": "Failed to generate content." }
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部