亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁(yè) > 知識(shí)庫(kù) > 聊聊Golang中很好用的viper配置模塊

聊聊Golang中很好用的viper配置模塊

熱門標(biāo)簽:地圖區(qū)域圖標(biāo)注后導(dǎo)出 谷歌美發(fā)店地圖標(biāo)注 利用地圖標(biāo)注位置 貴州電話智能外呼系統(tǒng) 官渡電銷外呼管理系統(tǒng)怎么收費(fèi) 400開頭電話怎樣申請(qǐng) 江蘇呼叫中心外呼系統(tǒng)有效果嗎 赤峰電銷 杭州人工智能電銷機(jī)器人費(fèi)用

前言

viper 支持Yaml、Json、 TOML、HCL 等格式,讀取非常的方便。

安裝

go get github.com/spf13/viper

如果提示找不到golang.org/x/text/這個(gè)庫(kù),是因?yàn)間olang.org/x/text/這個(gè)庫(kù)在GitHub上托管的路徑不一致。

解決辦法:

可以從https://github.com/golang/text下載源碼下來(lái),然后到$GOPATH/src下面創(chuàng)建golang.org/x/文件夾(已存在的忽略),把壓縮包的文件解壓到golang.org/x/文件夾之下。

然后執(zhí)行 go install -x golang.org/x/text 即可解決:

正文

初始結(jié)構(gòu)目錄如下:

準(zhǔn)備測(cè)試使用的yaml文件,注意yaml的格式十分嚴(yán)格,主要是每個(gè)冒號(hào)后面必須要有空格,數(shù)組前要加“-”號(hào)表示連續(xù)(注意減號(hào)后面也有空格),內(nèi)容如下:

TimeStamp: "2018-10-18 10:09:23"
Address: "Shenzhen"
Postcode: 518000
CompanyInfomation:
 Name: "Sunny"
 MarketCapitalization: 50000000
 EmployeeNum: 200
 Department:
 - "Finance"
 - "Design"
 - "Program"
 - "Sales"
 IsOpen: false

讀取yaml文件:

package main 
import (
 "github.com/spf13/viper"
 "fmt"
)
 
func main() {
 //讀取yaml文件
 v := viper.New()
 //設(shè)置讀取的配置文件
 v.SetConfigName("linux_config")
 //添加讀取的配置文件路徑
 v.AddConfigPath("./config/")
 //windows環(huán)境下為%GOPATH,linux環(huán)境下為$GOPATH
 v.AddConfigPath("$GOPATH/src/")
 //設(shè)置配置文件類型
 v.SetConfigType("yaml")
 
 if err := v.ReadInConfig();err != nil {
 fmt.Printf("err:%s\n",err)
 }
 
 fmt.Printf(
 `
 TimeStamp:%s
 CompanyInfomation.Name:%s
 CompanyInfomation.Department:%s `,
 v.Get("TimeStamp"),
 v.Get("CompanyInfomation.Name"),
 v.Get("CompanyInfomation.Department"),
 ) 
 /*
 result:
 TimeStamp:2018-10-18 10:09:23
 CompanyInfomation.Name:Sunny
 CompanyInfomation.Department:[Finance Design Program Sales]
 */ 
}

也可以直接反序列化為Struct,非常的方便:

package main 
import (
 "github.com/spf13/viper"
 "fmt"
)
 
func main() {
 //讀取yaml文件
 v := viper.New()
 //設(shè)置讀取的配置文件
 v.SetConfigName("linux_config")
 //添加讀取的配置文件路徑
 v.AddConfigPath("./config/")
 //windows環(huán)境下為%GOPATH,linux環(huán)境下為$GOPATH
 v.AddConfigPath("$GOPATH/src/")
 //設(shè)置配置文件類型
 v.SetConfigType("yaml") 
 if err := v.ReadInConfig();err != nil {
 fmt.Printf("err:%s\n",err)
 }
 
 fmt.Printf( `
 TimeStamp:%s
 CompanyInfomation.Name:%s
 CompanyInfomation.Department:%s `,
 v.Get("TimeStamp"),
 v.Get("CompanyInfomation.Name"),
 v.Get("CompanyInfomation.Department"),
 ) 
 /*
 result:
 TimeStamp:2018-10-18 10:09:23
 CompanyInfomation.Name:Sunny
 CompanyInfomation.Department:[Finance Design Program Sales]
 */ 
 //反序列化
 parseYaml(v) 
}
 
type CompanyInfomation struct{
 Name string
 MarketCapitalization int64
 EmployeeNum int64
 Department []interface{}
 IsOpen bool
}
 
type YamlSetting struct{
 TimeStamp string
 Address string
 Postcode int64
 CompanyInfomation CompanyInfomation
} 
 
func parseYaml(v *viper.Viper){
 var yamlObj YamlSetting;
 if err := v.Unmarshal(yamlObj) ; err != nil{
 fmt.Printf("err:%s",err)
 }
 fmt.Println(yamlObj)
 /*
 result:
 {2018-10-18 10:09:23 Shenzhen 518000 {Sunny 50000000 200 [Finance Design Program Sales] false}}
 */
}

viper也提供了讀取Command Line參數(shù)的功能:

package main 
import (
 "github.com/spf13/pflag"
 "github.com/spf13/viper"
 "fmt"
)
 
func main() {
 pflag.String("hostAddress", "127.0.0.1", "Server running address")
 pflag.Int64("port", 8080, "Server running port")
 pflag.Parse()
 
 viper.BindPFlags(pflag.CommandLine)
 fmt.Printf("hostAddress :%s , port:%s", viper.GetString("hostAddress"), viper.GetString("port"))
 /*
 example:
 go run main2.go --hostAddress=192.192.1.10 --port=9000
 help:
 Usage of /tmp/go-build183981952/b001/exe/main:
  --hostAddress string Server running address (default "127.0.0.1")
  --port int    Server running port (default 8080)
 */
 }

很多時(shí)候,我們服務(wù)器啟動(dòng)之后,如果臨時(shí)想修改某些配置參數(shù),需要重啟服務(wù)器才能生效,但是viper提供了監(jiān)聽函數(shù),可以免重啟修改配置參數(shù),非常的實(shí)用:

package main 
import (
 "github.com/spf13/viper"
 "fmt"
 "golang.org/x/net/context"
 "github.com/fsnotify/fsnotify"
)
 
func main() {
 //讀取yaml文件
 v := viper.New()
 //設(shè)置讀取的配置文件
 v.SetConfigName("linux_config")
 //添加讀取的配置文件路徑
 v.AddConfigPath("./config/")
 //windows環(huán)境下為%GOPATH,linux環(huán)境下為$GOPATH
 v.AddConfigPath("$GOPATH/src/")
 //設(shè)置配置文件類型
 v.SetConfigType("yaml")
 
 if err := v.ReadInConfig(); err != nil {
 fmt.Printf("err:%s\n", err)
 }
 
 //創(chuàng)建一個(gè)信道等待關(guān)閉(模擬服務(wù)器環(huán)境)
 ctx, _ := context.WithCancel(context.Background())
 //cancel可以關(guān)閉信道
 //ctx, cancel := context.WithCancel(context.Background())
 //設(shè)置監(jiān)聽回調(diào)函數(shù)
 v.OnConfigChange(func(e fsnotify.Event) {
 fmt.Printf("config is change :%s \n", e.String())
 //cancel()
 })
 //開始監(jiān)聽
 v.WatchConfig()
 //信道不會(huì)主動(dòng)關(guān)閉,可以主動(dòng)調(diào)用cancel關(guān)閉
 -ctx.Done()
 
 /*
 result:
 config is change :"/home/share/go/Viper/config/linux_config.yaml": CREATE 
 config is change :"/home/share/go/Viper/config/linux_config.yaml": CREATE
 */
}

完結(jié)

viper還有許多好用的功能,此文章只是舉例說(shuō)明了很小的部分。

補(bǔ)充:viper-配置信息處理框架(golang)

項(xiàng)目地址https://github.com/spf13/viper

1. viper

viper讀取配置信息的優(yōu)先級(jí)順序,從高到底:

顯式調(diào)用Set函數(shù)

命令行參數(shù)

環(huán)境變量

配置文件

key/value存儲(chǔ)系統(tǒng)

默認(rèn)值

2. 設(shè)置值

(1)設(shè)置默認(rèn)值

viper.SetDefault("ContentDir", "content")

...

(2)讀取配置文件

viper.SetConfigName("xxx")  // 設(shè)置配置文件名,不要帶后綴
viper.AddConfigPath("/path")  // 第一個(gè)搜索路徑
viper.AddConfigPath("../etc")  // 設(shè)置為相對(duì)路徑
err := viper.ReadInConfig()  // 搜索路徑,并讀取配置數(shù)據(jù)

(3)***監(jiān)視配置文件

viper支持應(yīng)用程序運(yùn)行時(shí)擁有讀取配置文件的能力

viper實(shí)例通過(guò)WatchConfig函數(shù):

viper.WatchConfig()
viper.OnConfigChange(func(e fsnotify.Event)) {
  fmt.Println("Config file changed:", e.Name)
})

(4)Set調(diào)用

viper.Set("Verbose", true)

viper.Set("LogFile", LogFile)

(5)綁定命令行參數(shù)

***viper支持綁定pflags參數(shù)【pflags是一個(gè)命令行參數(shù)解析庫(kù)】

serveCmd.Flags().Int("port", 1138, "Port to run Application server on")

viper.BindPFlag("port", serverCmd.Flags().Lookup("port"))

3. 獲取值

Get(key string) : interface{}
GetBool(key string) : bool
GetFloat64(key string) : float64
GetInt(key string) : int
GetString(key string) : string
GetStringMap(key string) : map[string]interface{}
GetStringMapString(key string) : map[string]string
GetStringSlice(key string) : []string
GetTime(key string) : time.Time
GetDuration(key string) : time.Duration
IsSet(key string) : bool

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Golang 限流器的使用和實(shí)現(xiàn)示例
  • Golang實(shí)現(xiàn)請(qǐng)求限流的幾種辦法(小結(jié))
  • Golang使用第三方包viper讀取yaml配置信息操作
  • golang常用庫(kù)之配置文件解析庫(kù)-viper使用詳解
  • golang 使用 viper 讀取自定義配置文件
  • golang接口IP限流,IP黑名單,IP白名單的實(shí)例

標(biāo)簽:鷹潭 黔西 武漢 宜春 河池 松原 泰安 保定

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《聊聊Golang中很好用的viper配置模塊》,本文關(guān)鍵詞  聊聊,Golang,中,很好,用的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《聊聊Golang中很好用的viper配置模塊》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于聊聊Golang中很好用的viper配置模塊的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    久久久久久久久综合影视网| 亚洲 男人 天堂| 四虎久久精品国产| 国产麻豆精品hdvideoss| 久久精品免视看国产成人2021| 午夜激情视频在线播放| 久久国产精品只做精品| 国产一区二区精品| 99久久视频| 一级毛片视频免费| 欧美大片aaaa一级毛片| 欧美国产日韩在线| 国产视频一区二区在线观看| 日日爽天天| 精品视频在线观看免费| 亚飞与亚基在线观看| 九九免费精品视频| 国产伦久视频免费观看 视频| 黄视频网站在线免费观看| 精品视频一区二区三区| 国产亚洲免费观看| 中文字幕一区二区三区 精品| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 韩国三级一区| 久久国产精品永久免费网站| 天天做人人爱夜夜爽2020毛片| 国产不卡在线观看| 99色视频在线观看| 久久久久久久免费视频| 国产成人啪精品视频免费软件| 午夜在线影院| 91麻豆精品国产自产在线观看一区| 九九干| 国产精品免费久久| 欧美18性精品| 日韩av成人| 日韩一级黄色| 黄色免费三级| 成人免费一级纶理片| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 亚洲精品久久玖玖玖玖| 亚洲女初尝黑人巨高清在线观看| 日韩女人做爰大片| 国产一区二区精品在线观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产精品免费久久| 四虎影视久久久免费| 免费的黄视频| 日本特黄特黄aaaaa大片| 欧美一级视| 999久久66久6只有精品| 久草免费在线色站| 久久精品欧美一区二区| 免费一级片在线观看| 久久精品免视看国产明星| 亚洲www美色| 美女免费毛片| 夜夜操网| 午夜在线亚洲| 色综合久久天天综合观看| 黄视频网站在线看| 国产伦精品一区二区三区无广告 | 成人高清视频在线观看| 亚洲 激情| 欧美1区2区3区| 国产国语对白一级毛片| 深夜做爰性大片中文| 久久久久久久免费视频| 欧美激情伊人| 天天色成人网| 青青久热| 欧美一区二区三区在线观看| 黄色福利片| 国产视频一区二区在线观看| 日本特黄一级| 99热精品一区| 国产视频一区在线| 国产成人精品综合在线| 国产美女在线一区二区三区| 精品国产香蕉在线播出| 午夜精品国产自在现线拍| 免费国产在线观看不卡| 欧美激情在线精品video| 国产高清在线精品一区a| 精品国产亚洲一区二区三区| 九九久久国产精品| 精品国产一区二区三区久| 国产网站免费观看| 久久99中文字幕久久| 国产91素人搭讪系列天堂| 精品视频免费在线| 欧美国产日韩一区二区三区| 中文字幕一区二区三区精彩视频| 国产精品自拍在线| 成人av在线播放| 国产91丝袜高跟系列| 午夜在线亚洲男人午在线| 精品国产香蕉伊思人在线又爽又黄| 天天做日日干| 成人影院一区二区三区| 国产伦久视频免费观看 视频| 国产一区二区精品在线观看| 美女免费毛片| 免费国产在线观看不卡| 一级片免费在线观看视频| 午夜欧美成人久久久久久| 青草国产在线观看| 国产一区二区精品久| 91麻豆高清国产在线播放| 欧美另类videosbestsex久久| 日本免费乱理伦片在线观看2018| 色综合久久天天综合| 午夜久久网| 国产综合成人观看在线| 成人在激情在线视频| 精品国产一区二区三区久久久蜜臀 | 久久精品欧美一区二区| 国产伦精品一区二区三区无广告 | 沈樵在线观看福利| 日韩中文字幕一区| 精品视频一区二区三区免费| 日韩在线观看视频网站| 国产精品自拍一区| 欧美1区2区3区| 99久久精品国产高清一区二区| 久久国产一久久高清| 精品视频免费在线| 韩国三级香港三级日本三级la | 黄色免费三级| 999久久狠狠免费精品| 九九精品在线| 九九九国产| 91麻豆精品国产自产在线观看一区| 成人高清视频免费观看| 午夜在线亚洲| 毛片高清| 韩国毛片免费| 精品视频免费在线| 国产不卡在线观看| 亚洲www美色| 国产亚洲精品aaa大片| 国产成人啪精品| 成人影视在线观看| 日本伦理片网站| 日本伦理片网站| 国产伦精品一区三区视频| 亚欧成人乱码一区二区| 亚洲第一色在线| 国产国产人免费视频成69堂| 97视频免费在线观看| 午夜在线亚洲男人午在线| 九九干| 四虎影视库| 韩国三级视频网站| 青青久热| 天天做日日爱| 国产精品1024永久免费视频| 欧美激情影院| 精品久久久久久中文| 午夜在线影院| 精品久久久久久中文字幕一区| 国产精品123| 精品国产三级a| 午夜欧美成人久久久久久| 精品视频在线观看一区二区三区| 精品视频在线观看一区二区三区| 你懂的日韩| 九九久久国产精品大片| 黄色免费三级| 天天做人人爱夜夜爽2020| 欧美另类videosbestsex久久| 香蕉视频一级| 国产极品白嫩美女在线观看看| 国产a一级| 国产不卡在线看| 亚洲女人国产香蕉久久精品| 国产一区二区精品在线观看| 九九干| 日韩男人天堂| 国产视频一区二区在线播放| 久久福利影视| 亚洲精品永久一区| 日本免费区| 国产极品精频在线观看| 国产91精品露脸国语对白| 91麻豆爱豆果冻天美星空| 精品国产一级毛片| 成人免费观看视频| 日韩在线观看网站| 亚飞与亚基在线观看| 精品久久久久久中文字幕2017| 夜夜操网| 久久国产一久久高清| 欧美a级大片| 午夜精品国产自在现线拍| 国产高清在线精品一区a| 亚洲精品影院一区二区| 精品视频在线观看一区二区三区| 国产成人啪精品| 精品久久久久久综合网|