Python 正则表达式

 

Search suggest: go yaml

在日常开发中,YAML 格式的文件基本上被默认为是配置文件,其内容因为缩进带来的层级感看起来非常直观和整洁。本文将会对 YAML 内容的读取进行介绍。

0x01 yaml.v3 包

yaml.v3 的包,可以让我们在 Go 里面轻松地操作 yaml 格式的数据(如将 yaml 格式转成结构体等)。在使用 yaml.v3 包之前,我们需要先安装它:

go get gopkg.in/yaml.v3

1 读 yaml 文件

一个 yaml 文件

username: chengchao
password: over2012

go

import (
    "gopkg.in/yaml.v3"
)

func main() {
	var myConfig MyConfig
	bytes, err := os.ReadFile("my-config.yaml")
	if err != nil {
		log.Fatal(err)
	}
	err = yaml.Unmarshal(bytes, &myConfig)
	if err != nil {
		log.Fatal(err)
	}
	log.Printf("%+v", myConfig.Username)
	log.Printf("%+v", myConfig.Password)
}
  • 首先通过 os 包里的 ReadFile 函数读取文件的内容,获取 []byte 类型的数据;
  • 通过 yaml 包的 Unmarshal(in []byte, out interface{}) 函数将字节数组类型的数据解析到 Config 结构体变量里,Unmarshal 函数需要传递两个参数,第一个是 字节数组类型的数据,第二个是一个任意类型的数据,实际上要传入一个指针变量,或者某个变量的地址值;

0x02 viper

viper 包可以帮助我们做很多东西,比如读取 json、yaml、properties 等配置文件,读取环境变量、读取命令行参数等。在使用 viper 包之前,我们需要先安装它:

go get github.com/spf13/viper

1 读 yaml 文件

import (
    "log"
    "github.com/spf13/viper"
)

func main() { viper.SetConfigPath(“/path/of/file”) viper.SetConfigName(“yaml-file-name.yaml”) viper.SetConfigType(“yaml”)

err := viper.ReadInConfig()
if err != nil {
    log.Println("err:", err)
    return
}
log.Println(viper.Get("db1")) // map[url: port]
log.Println(viper.Get("db1.url")) // somevalue .. }