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

Golang工具庫viper的使用教程

 更新時(shí)間:2023年07月21日 14:25:54   作者:uccs  
viper?是?go?項(xiàng)目中用來讀取配置文件的庫,支持讀取?yaml、toml、json、hcl、env?等格式的配置文件,下面就來和大家聊聊它的具體使用吧

vipergo 項(xiàng)目中用來讀取配置文件的庫,支持讀取 yamltoml、jsonhcl、env 等格式的配置文件

讀取環(huán)境變量

viper 可以讀取終端的環(huán)境變量

如果你用的是 zsh~/.zshrc 中設(shè)置,如果是 bash~/.bashrc 中設(shè)置

寫環(huán)境變量時(shí),等號(hào)兩邊不能有空格,否則會(huì)報(bào)錯(cuò)

export APP_DEBUG=true

寫好后,記得 source 一下,或者重啟終端

source ~/.zshrc

使用 viper.AutomaticEnv 將環(huán)境變量都讀取到 viper

然后就可以使用 viper.GetBool("APP_DEBUG") 來獲取環(huán)境變量了

func GetEnvInfo(env string) bool {
	viper.AutomaticEnv()
	return viper.GetBool(env)
}
app_debug := GetEnvInfo("APP_DEBUG")
fmt.Println(app_debug) // true

讀取本地的配置文件

新建一個(gè) config-debug.yaml 文件,內(nèi)容如下:

host: "127.0.0.1"
port: 50051

然后使用 viper 讀取,setConfigFile 填寫的路徑是相對(duì)于 main.go 的路徑

使用 viper.ReadInConfig 來讀取配置文件

viper.SetConfigFile("./config-debug.yaml")
if err := viper.ReadInConfig(); err != nil {
  panic(err)
}
fmt.Println(viper.GetString("host")) // "127.0.0.1"

使用 viper.SetConfigName 來設(shè)置文件名,viper.SetConfigType 來設(shè)置文件類型,可以更靈活的讀取配置文件

  • viper.SetConfigName 設(shè)置文件名,不需要帶后綴
  • viper.SetConfigType 設(shè)置文件類型
  • viper.AddConfigPath 設(shè)置文件路徑
viper.SetConfigName("config-debug")
viper.SetConfigType("yaml")
viper.AddConfigPath("./")
if err := viper.ReadInConfig(); err != nil {
  panic(err)
}
fmt.Println(viper.GetString("host")) // "127.0.0.1"

將配置文件中的配置映射到結(jié)構(gòu)體中

每次使用 viper.GetString 來獲取配置文件中的配置,都會(huì)寫很多重復(fù)的代碼,可以將配置文件中的配置映射到結(jié)構(gòu)體中

新建結(jié)構(gòu)體,結(jié)構(gòu)體的字段名要和配置文件中的字段名一致,使用 mapstructure 標(biāo)簽來映射

type Server struct {
  Host string `mapstructure:"host"`
  Port int    `mapstructure:"port"`
}

使用 viper.Unmarshal 將配置文件中的配置映射到結(jié)構(gòu)體中

var server Server
viper.SetConfigName("config-debug")
viper.SetConfigType("yaml")
viper.AddConfigPath("./")
if err := viper.ReadInConfig(); err != nil {
  panic(err)
}
if err := viper.Unmarshal(&server); err != nil {
	panic(err)
}
fmt.Println(server.Host) // "127.0.0.1"

監(jiān)聽配置信息的變化

如果配置文件發(fā)生變化,viper 支持在運(yùn)行時(shí)監(jiān)聽配置文件的變化

使用 viper.WatchConfig 來監(jiān)聽配置文件的變化,使用 viper.OnConfigChange 來監(jiān)聽配置文件的變化

onConfigChange 傳入的參數(shù)是一個(gè)函數(shù),函數(shù)的參數(shù)是 fsnotify.Event,在函數(shù)中重新讀取配置文件,然后將配置文件中的配置映射到結(jié)構(gòu)體中

viper.OnConfigChange(func(e fsnotify.Event) {
  _ = viper.ReadInConfig()
  _ = viper.Unmarshal(&server)
})
viper.WatchConfig()

到此這篇關(guān)于Golang工具庫viper的使用教程的文章就介紹到這了,更多相關(guān)Golang viper內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • GoLang反射機(jī)制深入講解

    GoLang反射機(jī)制深入講解

    這篇文章主要介紹了GoLang反射機(jī)制,反射是一種讓程序可以在運(yùn)行時(shí)( runtime )檢查其數(shù)據(jù)結(jié)構(gòu)的能力,通過反射可以獲取豐富的類型信息
    2022-12-12
  • Go時(shí)間操作常用方法(推薦!)

    Go時(shí)間操作常用方法(推薦!)

    平時(shí)開發(fā)過程中,時(shí)間相關(guān)的操作用的還是很多的,下面這篇文章主要給大家介紹了關(guān)于Go時(shí)間操作常用方法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 自動(dòng)生成代碼controller?tool的簡單使用

    自動(dòng)生成代碼controller?tool的簡單使用

    這篇文章主要為大家介紹了自動(dòng)生成代碼controller?tool的簡單使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Go語句與表達(dá)式案例手冊(cè)深度解析

    Go語句與表達(dá)式案例手冊(cè)深度解析

    這篇文章主要為大家介紹了Go語句與表達(dá)式案例手冊(cè)深度解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Go調(diào)度器學(xué)習(xí)之協(xié)作與搶占詳解

    Go調(diào)度器學(xué)習(xí)之協(xié)作與搶占詳解

    如果某個(gè)G執(zhí)行時(shí)間過長,其他的G如何才能被正常調(diào)度,這就引出了接下來的話題:協(xié)作與搶占。本文將通過一些示例為大家詳細(xì)講講調(diào)度器中協(xié)作與搶占的相關(guān)知識(shí),需要的可以參考一下
    2023-04-04
  • Go語言接口的嵌套的具體使用

    Go語言接口的嵌套的具體使用

    在Go語言中,不僅結(jié)構(gòu)體與結(jié)構(gòu)體之間可以嵌套,接口與接口間也可以通過嵌套創(chuàng)造出新的接口,本文主要介紹了Go語言接口的嵌套的具體使用,感興趣的可以了解一下
    2023-04-04
  • Golang通脈之方法詳情

    Golang通脈之方法詳情

    這篇文章主要介紹了Golang通脈方法,Go語言中的方法(Method)是一種作用于特定類型變量的函數(shù)。這種特定類型變量叫做接收者(Receiver)。接收者的概念就類似于,其他語言中的this或者 self,具體內(nèi)容請(qǐng)和小編一起來學(xué)習(xí)下面文章內(nèi)容吧
    2021-10-10
  • 使用Go語言開發(fā)一個(gè)高并發(fā)系統(tǒng)

    使用Go語言開發(fā)一個(gè)高并發(fā)系統(tǒng)

    高并發(fā)系統(tǒng)是指能同時(shí)支持眾多用戶請(qǐng)求,處理大量并行計(jì)算的系統(tǒng),這篇文章主要為大家詳細(xì)介紹了如何使用Go語言開發(fā)一個(gè)高并發(fā)系統(tǒng),感興趣的小伙伴可以了解下
    2023-11-11
  • Go底層channel實(shí)現(xiàn)原理及示例詳解

    Go底層channel實(shí)現(xiàn)原理及示例詳解

    這篇文章主要介紹了Go底層channel實(shí)現(xiàn)原理及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go語言計(jì)算指定年月天數(shù)的方法

    Go語言計(jì)算指定年月天數(shù)的方法

    這篇文章主要介紹了Go語言計(jì)算指定年月天數(shù)的方法,實(shí)例分析了Go語言操作時(shí)間的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02

最新評(píng)論