欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang實(shí)現(xiàn)yaml配置文件的解析

 更新時(shí)間:2024年12月27日 09:20:13   作者:瘋狂吧小飛牛  
這篇文章主要介紹了Golang實(shí)現(xiàn)yaml配置文件的解析,文中通過圖文結(jié)合的方式講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下

代碼

需要建立3個(gè)文件,目錄結(jié)構(gòu)如下:

配置文件 conf.yaml

redis:  
  host: "127.0.0.1"
  port: 6379
  db: 11  
  pass: "aaaaaa" 

go模塊文件 go.mod,用于管理項(xiàng)目的依賴關(guān)系和版本信息。

module readyaml

主程序 readyaml.go

package main
 
import (
    "github.com/spf13/viper"
    "fmt"
)
 
// 配置文件
type Conf struct {
    Redis RedisConfig      `mapstructure:"redis"`
}
 
// redis配置數(shù)據(jù)
type RedisConfig struct{
    HOST    string    `mapstructure:"host"`
    PORT    int       `mapstructure:"port"`
    DB      int       `mapstructure:"db"`
    PASS    string    `mapstructure:"pass"`
}
 
func getConf() Conf{
    var cfg Conf 
 
    // 設(shè)置待讀取配置文件的名字
    viper.SetConfigName("conf")
    // 設(shè)置待讀取配置文件的格式
    viper.SetConfigType("yaml")
    // 添加配置文件的檢索路徑
    viper.AddConfigPath(".")
 
    // 讀取數(shù)據(jù)
    if err := viper.ReadInConfig(); err != nil {
        fmt.Printf("ReadInConfig error : %s\n", err)
        return cfg
    }
 
    // 測試 1 : 直接獲取數(shù)據(jù)
    fmt.Printf("Host %s\n", viper.GetString("redis.host"))
    fmt.Printf("PORT %d\n", viper.GetInt("redis.port"))
    fmt.Printf("DB %d\n", viper.GetInt("redis.db"))
    fmt.Printf("PASS %s\n", viper.GetString("redis.pass"))
 
    // 通過viper模塊,反序列化成對象
    if err := viper.Unmarshal(&cfg); err != nil {
        fmt.Printf("Unmarshal error : %s\n", err)
        return cfg
    }
 
    return cfg 
}
 
var cfg Conf = getConf()
 
func main() {
    // 打印測試
    fmt.Printf("HOST %s, PORT %d, DB %d, PASS %s len(PASS) %d\n", cfg.Redis.HOST, cfg.Redis.PORT, cfg.Redis.DB, cfg.Redis.PASS, len(cfg.Redis.PASS) )
}

首先,需要整理和更新項(xiàng)目的依賴關(guān)系

go mod tidy

這個(gè)過程中,會下載缺失的模塊。go.mod文件會進(jìn)行更新,并且多出一個(gè)go.sum文件,用于記錄項(xiàng)目依賴樹中所有模塊的特定版本內(nèi)容的預(yù)期哈希值。

在這個(gè)過程中,如果無法聯(lián)網(wǎng),或者無法訪問源,則會報(bào)錯(cuò)如下圖。如果沒有報(bào)錯(cuò),則可以直接執(zhí)行第二步。

可以使用國內(nèi)go代理解決這個(gè)問題,此處用到GOPROXY環(huán)境變量。

執(zhí)行 export GOPROXY=https://goproxy.cn,然后繼續(xù)執(zhí)行 go mod tidy

也可以在 /etc/bashrc或者~/.bashrc文件添加這個(gè)命令,這樣每次登錄會話會自動添加此環(huán)境變量。

第二步,直接執(zhí)行腳本: go run readyaml.go ;

也可以編譯后再執(zhí)行二進(jìn)制文件: go build readyaml.go,編譯后,創(chuàng)建了編譯后的文件 readyaml。

直接執(zhí)行 ./readyaml。具體操作,如下圖所示:

避坑:定義的數(shù)據(jù)結(jié)構(gòu)成員變量必須是大寫字母開頭,不然 viper.Unmarshal 這一步可能映射不成功。這是由于在golang中,以小寫字母開頭定義的標(biāo)識符(如變量名、函數(shù)名、類型名等)只能在本包內(nèi)訪問,是不能跨包訪問的。

也就是:type RedisConfig struct 和 type Conf struct 的成員變量需要大寫開頭。

以上就是Golang實(shí)現(xiàn)yaml配置文件的解析的詳細(xì)內(nèi)容,更多關(guān)于Golang解析yaml文件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang編寫自定義IP限流中間件的方法詳解

    Golang編寫自定義IP限流中間件的方法詳解

    這篇文章給大家詳細(xì)的介紹了Golang編寫自定義IP限流中間件的方法,文章通過代碼實(shí)例介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-09-09
  • 解決golang編譯提示dial tcp 172.217.160.113:443: connectex: A connection attempt failed(推薦)

    解決golang編譯提示dial tcp 172.217.160.113:443: con

    這篇文章主要介紹了解決golang編譯提示dial tcp 172.217.160.113:443: connectex: A connection attempt failed,此問題完美解決,需要的朋友可以參考下
    2023-02-02
  • golang判斷結(jié)構(gòu)體為空的問題

    golang判斷結(jié)構(gòu)體為空的問題

    這篇文章主要介紹了golang判斷結(jié)構(gòu)體為空的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 淺談GoLang幾種讀文件方式的比較

    淺談GoLang幾種讀文件方式的比較

    這篇文章主要介紹了淺談GoLang幾種讀文件方式的比較,一般來說常用的有三種。使用Read加上buffer,使用bufio庫和ioutil 庫,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2019-01-01
  • 淺析Golang中的net/http路由注冊與請求處理

    淺析Golang中的net/http路由注冊與請求處理

    這篇文章主要為大家詳細(xì)介紹了Golang中的net/http路由注冊與請求處理的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • GoLang中拼接字符串性能優(yōu)化方法詳解

    GoLang中拼接字符串性能優(yōu)化方法詳解

    最近在做性能優(yōu)化,有個(gè)函數(shù)里面的耗時(shí)特別長,看里面的操作大多是一些字符串拼接的操作,而字符串拼接在 golang 里面其實(shí)有很多種實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于Golang語言如何高效拼接字符串的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • Golang實(shí)現(xiàn)IP地址轉(zhuǎn)整數(shù)的方法詳解

    Golang實(shí)現(xiàn)IP地址轉(zhuǎn)整數(shù)的方法詳解

    在 Go 語言中,將 IP 地址轉(zhuǎn)換為整數(shù)涉及到解析 IP 地址并處理其字節(jié)表示,本文給大家介紹了Golang實(shí)現(xiàn)IP地址轉(zhuǎn)整數(shù)的方法,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-02-02
  • GoFrame框架數(shù)據(jù)校驗(yàn)之校驗(yàn)結(jié)果Error接口對象

    GoFrame框架數(shù)據(jù)校驗(yàn)之校驗(yàn)結(jié)果Error接口對象

    這篇文章主要為大家介紹了GoFrame框架數(shù)據(jù)校驗(yàn)之校驗(yàn)結(jié)果Error接口對象示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • gin項(xiàng)目部署到服務(wù)器并后臺啟動的步驟

    gin項(xiàng)目部署到服務(wù)器并后臺啟動的步驟

    本文主要介紹了gin項(xiàng)目部署到服務(wù)器并后臺啟動的步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • go集成gorm數(shù)據(jù)庫的操作代碼

    go集成gorm數(shù)據(jù)庫的操作代碼

    GORM 是一個(gè)用于 Go 語言的 ORM(對象關(guān)系映射)庫,它提供了一種簡單而強(qiáng)大的方式來與數(shù)據(jù)庫進(jìn)行交互,GORM 支持多種數(shù)據(jù)庫,并且提供了豐富的功能,如自動遷移、預(yù)加載、事務(wù)管理等,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-11-11

最新評論