今天小编给大家分享一下Go语言如何读取YAML配置文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
yaml.v3
的包,可以让我们在 Go
里面轻松地操作 yaml
格式的数据(如将 yaml
格式转成结构体等)。在使用 yaml.v3
包之前,我们需要先安装它:
go get gopkg.in/yaml.v3
yaml 测试文件内容:
mysql: url: 127.0.0.1 port: 3306 redis: host: 127.0.0.1 port: 6379
将 yaml
文件的数据转成自定义的结构体或 Map
import ( "fmt" "gopkg.in/yaml.v3" "os" ) type Config struct { Mysql Mysql `json:"mysql"` Redis Redis `json:"redis"` } type Mysql struct { Url string Port int } type Redis struct { Host string Port int } func main() { dataBytes, err := os.ReadFile("test.yaml") if err != nil { fmt.Println("读取文件失败:", err) return } fmt.Println("yaml 文件的内容: \n", string(dataBytes)) config := Config{} err = yaml.Unmarshal(dataBytes, &config) if err != nil { fmt.Println("解析 yaml 文件失败:", err) return } fmt.Printf("config → %+v\n", config) // config → {Mysql:{Url:127.0.0.1 Port:3306} Redis:{Host:127.0.0.1 Port:6379}} mp := make(map[string]any, 2) err = yaml.Unmarshal(dataBytes, mp) if err != nil { fmt.Println("解析 yaml 文件失败:", err) return } fmt.Printf("map → %+v", config) // config → {Mysql:{Url:127.0.0.1 Port:3306} Redis:{Host:127.0.0.1 Port:6379}} }
执行结果:
yaml 文件的内容:
mysql:
url: 127.0.0.1
port: 3306
redis:
host: 127.0.0.1
port: 6379
config → {Mysql:{Url:127.0.0.1 Port:3306} Redis:{Host:127.0.0.1 Port:6379}}
map → {Mysql:{Url:127.0.0.1 Port:3306} Redis:{Host:127.0.0.1 Port:6379}}
首先通过 os
包里的 ReadFile
函数读取文件的内容,获取 []byte
类型的数据;
通过 yaml
包的 Unmarshal(in []byte, out interface{})
函数将字节数组类型的数据解析到 Config
结构体变量里,Unmarshal 函数需要传递两个参数,第一个是 字节数组类型的数据,第二个是一个任意类型的数据,实际上要传入一个指针变量,或者某个变量的地址值;
通过打印结果可以看到 yaml 文件的内容已经成功解析到结构体 config
和 mp
变量里了,后续可以通过操作结构体和 map
获取对应数据。
viper
包可以帮助我们做很多东西,比如读取 json
、yaml
、properties
等配置文件,读取环境变量、读取命令行参数等。在使用 viper
包之前,我们需要先安装它:
go get github.com/spf13/viper
yaml 测试文件内容:
mysql: url: 127.0.0.1 port: 3306 redis: host: 127.0.0.1 port: 6379
代码示例:
import ( "fmt" "github.com/spf13/viper" ) func main() { // 设置配置文件的名字 viper.SetConfigName("test") // 设置配置文件的类型 viper.SetConfigType("yaml") // 添加配置文件的路径,指定 config 目录下寻找 viper.AddConfigPath("./config") // 寻找配置文件并读取 err := viper.ReadInConfig() if err != nil { panic(fmt.Errorf("fatal error config file: %w", err)) } fmt.Println(viper.Get("mysql")) // map[port:3306 url:127.0.0.1] fmt.Println(viper.Get("mysql.url")) // 127.0.0.1 }
通过 SetConfigName
函数,指定配置文件的名称;
通过 SetConfigType
函数,指定配置文件的类型;
通过 AddConfigPath
函数,指定配置文件所在目录,可以多次调用此函数,指定多个目录;
通过 ReadInConfig
函数,寻找配置文件并读取,操作的过程中可能会发生错误,如配置文件没找到,配置文件的内容格式不正确等;读取文件成功之后,可以通过 Get
函数,通过指定 key
获取对应的 value
。
以上就是“Go语言如何读取YAML配置文件”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。