GO解析yaml文件

Posted 一曲长歌一剑天涯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GO解析yaml文件相关的知识,希望对你有一定的参考价值。

参考资料

Golang使用第三方包viper读取yaml配置信息

1. 书写dev_custom.yml文件内容

mysql:
  dns: "sqlserver://sa:123456@DESKTOP-HMTA87I:1433?database=wzz"

sqlServer:
  dns: "me:123abc@tcp(10.0.0.0:3306)/wzz_db?charset=utf8"

2. 解析dev_custom.yml文件内容

package config

import (
    "github.com/mitchellh/mapstructure"
    "github.com/spf13/viper"
    "log"
    "os"
)

// CustomT CustomT
type Mysql struct {
    DNS string `yaml:"dns"`
}

type SqlServer struct {
    DNS string `yaml:"dns"`
}

// CustomT CustomT
type CustomT struct {
    Mysql     Mysql     `yaml:"mySql"`
    SqlServer SqlServer `yaml:"sqlServer"`
}

// Custom Custom
var Custom CustomT

// ReadConfig ReadConfig for custom
func ReadConfig(configName string, configPath string, configType string) *viper.Viper {
    v := viper.New()
    v.SetConfigName(configName)
    v.AddConfigPath(configPath)
    v.SetConfigType(configType)
    err := v.ReadInConfig()
    if err != nil {
        return nil
    }

    res := v.AllKeys()
    log.Println("res=", res)

    return v
}

// InitConfig InitConfig
func InitConfig() (err error) {
    path, err := os.Getwd()
    if err != nil {
        return err
    }

    v := ReadConfig("dev_custom", path, "yml")
    md := mapstructure.Metadata{}
    err = v.Unmarshal(&Custom, func(config *mapstructure.DecoderConfig) {
        config.TagName = "yaml"
        config.Metadata = &md
    })

    return err
}

3. 测试

package config

import (
    "testing"
)

func TestConfig(t *testing.T) {
    err := InitConfig()
    if err != nil {
        t.Fatal(err)
    }
    t.Log("mysqlDNS=", Custom.Mysql.DNS)
    t.Log("sqlserverDNS=", Custom.SqlServer.DNS)
}

以上是关于GO解析yaml文件的主要内容,如果未能解决你的问题,请参考以下文章

Golang yaml与toml解析

Go 处理yaml类型的配置文件

如何在 Golang 中使用动态键解析 YAML

2020-06-15关于iOS 使用yaml配置文件总结

Go语言之读取yaml配置文件,转换成struct结构,json形式输出

34.Go YAML