golang讀取yaml配置文件的示例代碼
前言
在項(xiàng)目開(kāi)發(fā)中,經(jīng)常需要把一些配置文件常量提取到統(tǒng)一配置文件進(jìn)行維護(hù),因?yàn)檫@樣對(duì)于改變量以及維護(hù)非常方便,對(duì)于Java的Sringboot項(xiàng)目,有applocation.properties或者yml或者yaml等文件,go項(xiàng)目開(kāi)發(fā)中,可以把需要維護(hù)的常量或者配置提取到y(tǒng)aml文件,因?yàn)閅AML 的語(yǔ)法和其他高級(jí)語(yǔ)言類似,并且可以簡(jiǎn)單表達(dá)清單、散列表,標(biāo)量等數(shù)據(jù)形態(tài),對(duì)于項(xiàng)目修改配置非常方便
go安裝yaml組件
使用以下命令安裝依賴包
go get gopkg.in/yaml.v3
yaml使用
在項(xiàng)目中創(chuàng)建test.yaml配置文件
配置文件內(nèi)容如下
hello: name: 127.0.0.1 age: 3306 redis: host: 127.0.0.1 port: 6379 password: 123456
讀取yaml內(nèi)容
使用程序讀取yaml配置文件內(nèi)容,內(nèi)容如下:
package main import ( "fmt" "gopkg.in/yaml.v3" "os" ) type Config struct { Hello `yaml:"hello"` Redis `yaml:"redis"` } type Hello struct { Name string `yaml:"name"` Age int `yaml:"age"` } type Redis struct { Host string `yaml:"host"` Port int `yaml:"port"` Password string `yaml:"password"` } func main() { dataBytes, err := os.ReadFile("test.yaml") if err != nil { fmt.Println("讀取文件失?。?, err) return } fmt.Println("yaml 文件的內(nèi)容:\n", string(dataBytes)) config := Config{} err = yaml.Unmarshal(dataBytes, &config) if err != nil { fmt.Println("解析 yaml 文件失?。?, err) return } fmt.Printf("config內(nèi)容為:\n", config) mp := make(map[string]any, 2) err = yaml.Unmarshal(dataBytes, mp) if err != nil { fmt.Println("解析 yaml 文件失?。?, err) return } fmt.Println("內(nèi)容為:", mp) }
結(jié)果為:
使用yaml
可以指定對(duì)應(yīng)配置文件名稱
go創(chuàng)建yaml文件
go也可以通過(guò)程序生成yaml文件,程序如下
package main import ( "fmt" "gopkg.in/yaml.v3" "os" ) type Config struct { Hello `yaml:"hello"` Redis Redis `yaml:"redis"` } type Hello struct { Name string `yaml:"name"` Age int `yaml:"age"` } type Redis struct { Host string `yaml:"host"` Port int `yaml:"port"` Password string `yaml:"password"` } func main() { var data = Config{ Hello: Hello{ Name: "aaa", Age: 12, }, Redis: Redis{ Host: "127.0.0.1", Port: 6379, Password: "121321", }, } file, err := os.Create("./1.yaml") defer func(file *os.File) { err := file.Close() if err != nil { } }(file) if err != nil { fmt.Println("創(chuàng)建文件失敗:", err) return } // 創(chuàng)建編碼器 encoder := yaml.NewEncoder(file) err = encoder.Encode(&data) if err != nil { fmt.Println("Error encoding YAML:", err) return } fmt.Println("創(chuàng)建成功") }
總結(jié)
gopkg.in/yaml.v3 是一個(gè)功能強(qiáng)大的 Go 庫(kù),用于解析和生成 YAML 數(shù)據(jù),在開(kāi)發(fā)中,可以將配置提取到y(tǒng)aml配置文件中,易于程序維護(hù),可以提高開(kāi)發(fā)效率,但是程序技術(shù)很多,每個(gè)人開(kāi)發(fā)習(xí)慣不同,在開(kāi)發(fā)中,根據(jù)個(gè)人喜好開(kāi)發(fā)
到此這篇關(guān)于golang讀取yaml配置文件的示例代碼的文章就介紹到這了,更多相關(guān)go讀取yaml配置文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Go中攔截HTTP流數(shù)據(jù)時(shí)字段丟失的問(wèn)題
在開(kāi)發(fā)高并發(fā)的Web應(yīng)用時(shí),尤其是在處理HTTP代理和流數(shù)據(jù)攔截的場(chǎng)景下,遇到數(shù)據(jù)丟失的問(wèn)題并不罕見(jiàn),最近,在一個(gè)項(xiàng)目中,我遇到了一個(gè)棘手的問(wèn)題:在攔截并轉(zhuǎn)發(fā)HTTP流數(shù)據(jù)的過(guò)程中,某些數(shù)據(jù)字段因?yàn)樘幚磉^(guò)快而被丟失,所以本文給大家介紹如何解決這個(gè)問(wèn)題2024-08-08gin使用自定義結(jié)構(gòu)綁定表單數(shù)據(jù)的示例代碼
這篇文章主要介紹了gin使用自定義結(jié)構(gòu)綁定表單數(shù)據(jù)的示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11idea搭建go環(huán)境實(shí)現(xiàn)go語(yǔ)言開(kāi)發(fā)
這篇文章主要給大家介紹了關(guān)于idea搭建go環(huán)境實(shí)現(xiàn)go語(yǔ)言開(kāi)發(fā)的相關(guān)資料,文中通過(guò)圖文介紹以及代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用go具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-01-01Golang設(shè)計(jì)模式之外觀模式的實(shí)現(xiàn)
這篇文章主要介紹了Golang設(shè)計(jì)模式之外觀模式的實(shí)現(xiàn),外觀模式是一種常用的設(shè)計(jì)模式之一,是一種結(jié)構(gòu)型設(shè)計(jì)模式,它提供了一個(gè)簡(jiǎn)單的接口來(lái)訪問(wèn)復(fù)雜系統(tǒng)的各種功能,從而降低了系統(tǒng)的復(fù)雜度,需要詳細(xì)了解可以參考下文2023-05-05golang復(fù)制文件夾移動(dòng)到另一個(gè)文件夾實(shí)現(xiàn)方法詳解
這篇文章主要為大家介紹了golang復(fù)制文件夾并移動(dòng)到另一個(gè)文件夾實(shí)現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07簡(jiǎn)單對(duì)比一下?C語(yǔ)言?與?Go語(yǔ)言
這篇文章主要介紹了簡(jiǎn)單對(duì)比一下?C語(yǔ)言?與?Go語(yǔ)言的相關(guān)資料,需要的朋友可以參考下2023-08-08關(guān)于go語(yǔ)言載入json可能遇到的一個(gè)坑
Go 語(yǔ)言從新手到大神,每個(gè)人多少都會(huì)踩一些坑,那么下面這篇文章主要給大家介紹了關(guān)于go語(yǔ)言載入json可能遇到的一個(gè)坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-07-07Go語(yǔ)言 channel如何實(shí)現(xiàn)歸并排序中的merge函數(shù)詳解
這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言 channel如何實(shí)現(xiàn)歸并排序中merge函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-02-02