您好,登錄后才能下訂單哦!
今天小編給大家分享一下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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。