中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言如何讀取YAML配置文件

發布時間:2022-12-28 15:30:55 來源:億速云 閱讀:101 作者:iii 欄目:開發技術

今天小編給大家分享一下Go語言如何讀取YAML配置文件的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    yaml.v3 包

    yaml.v3 的包,可以讓我們在 Go 里面輕松地操作 yaml 格式的數據(如將 yaml 格式轉成結構體等)。在使用 yaml.v3 包之前,我們需要先安裝它:

    go get gopkg.in/yaml.v3

    讀取 yaml 文件

    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 文件的內容已經成功解析到結構體 configmp 變量里了,后續可以通過操作結構體和 map 獲取對應數據。

    viper 包

    viper 包可以幫助我們做很多東西,比如讀取 jsonyamlproperties 等配置文件,讀取環境變量、讀取命令行參數等。在使用 viper 包之前,我們需要先安裝它:

    go get github.com/spf13/viper

    讀取 yaml 文件

    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配置文件”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    绵竹市| 射洪县| 蚌埠市| 土默特右旗| 淮安市| 兴文县| 康定县| 和平县| 龙南县| 清流县| 文安县| 读书| 台江县| 修武县| 伊川县| 新平| 汨罗市| 洛浦县| 萝北县| 隆昌县| 棋牌| 锡林郭勒盟| 宾阳县| 民和| 株洲县| 宁河县| 濉溪县| 古丈县| 海口市| 简阳市| 柳林县| 阜平县| 琼中| 庆阳市| 临桂县| 苏州市| 云霄县| 句容市| 巴彦淖尔市| 秦皇岛市| 灯塔市|