最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

代碼

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

配置文件 conf.yaml

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

go模塊文件 go.mod,用于管理項目的依賴關系和版本信息。

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 
 
    // 設置待讀取配置文件的名字
    viper.SetConfigName("conf")
    // 設置待讀取配置文件的格式
    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) )
}

首先,需要整理和更新項目的依賴關系

go mod tidy

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

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

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

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

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

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

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

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

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

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

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

相關文章

  • golang中的時間格式化

    golang中的時間格式化

    這篇文章主要介紹了golang中的時間格式化問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • GO語言入門學習之基本數(shù)據(jù)類型字符串

    GO語言入門學習之基本數(shù)據(jù)類型字符串

    字符串在Go語言中以原生數(shù)據(jù)類型出現(xiàn),使用字符串就像使用其他原生數(shù)據(jù)類型(int、bool、float32、float64 等)一樣,下面這篇文章主要給大家介紹了關于GO語言入門學習之基本數(shù)據(jù)類型字符串的相關資料,需要的朋友可以參考下
    2022-04-04
  • golang中time包之時間間隔格式化和秒、毫秒、納秒等時間戳格式輸出的方法實例

    golang中time包之時間間隔格式化和秒、毫秒、納秒等時間戳格式輸出的方法實例

    時間和日期是我們編程中經(jīng)常會用到的,下面這篇文章主要給大家介紹了關于golang中time包之時間間隔格式化和秒、毫秒、納秒等時間戳格式輸出的方法實例,需要的朋友可以參考下
    2022-08-08
  • 安裝GoLang環(huán)境和開發(fā)工具的圖文教程

    安裝GoLang環(huán)境和開發(fā)工具的圖文教程

    Go是一門由Google開發(fā)的編程語言,GoLand的安裝非常簡單,本文主要介紹了安裝GoLang環(huán)境和開發(fā)工具的圖文教程,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Golang實現(xiàn)http重定向https

    Golang實現(xiàn)http重定向https

    這篇文章介紹了Golang實現(xiàn)http重定向https的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 深入理解?Go?中的字符串

    深入理解?Go?中的字符串

    這篇文章主要介紹了深入理解?Go?中的字符串,在編程語言中,字符串發(fā)揮著重要的角色。字符串背后的數(shù)據(jù)結(jié)構(gòu)一般有兩種類型,一種在編譯時指定長度不能修改,一種具有動態(tài)的長度可以修改,下文更多相關資料需要的小伙伴可以參考一下
    2022-05-05
  • Go語言for-range函數(shù)使用技巧實例探究

    Go語言for-range函數(shù)使用技巧實例探究

    這篇文章主要為大家介紹了Go語言for-range函數(shù)使用技巧實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • golang 實現(xiàn)一個負載均衡案例(隨機,輪訓)

    golang 實現(xiàn)一個負載均衡案例(隨機,輪訓)

    這篇文章主要介紹了golang 實現(xiàn)一個負載均衡案例(隨機、輪訓),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 使用Go語言實現(xiàn)心跳機制

    使用Go語言實現(xiàn)心跳機制

    心跳最典型的應用場景是是探測服務是否存活,這篇文章主要來和大家介紹一下如何使用Go語言實現(xiàn)一個簡單的心跳程序,感興趣的可以了解下
    2024-01-01
  • Golang項目搭配nginx部署反向代理負載均衡講解

    Golang項目搭配nginx部署反向代理負載均衡講解

    這篇文章主要為大家介紹了Golang項目搭配nginx部署正反向代理負載均衡講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04

最新評論

泰和县| 巢湖市| 郑州市| 松江区| 汪清县| 古丈县| 错那县| 禄劝| 涡阳县| 锡林郭勒盟| 六盘水市| 油尖旺区| 龙泉市| 清新县| 武定县| 秦皇岛市| 扎赉特旗| 中阳县| 青岛市| 荆门市| 聂荣县| 呼图壁县| 河北区| 松滋市| 凤凰县| 高淳县| 读书| 勃利县| 临沭县| 鲁山县| 津市市| 广饶县| 黔西| 丰台区| 视频| 长阳| 台北市| 淅川县| 格尔木市| 南充市| 三门峡市|