婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 聊聊Golang中很好用的viper配置模塊

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

熱門標簽:地圖區域圖標注后導出 谷歌美發店地圖標注 利用地圖標注位置 貴州電話智能外呼系統 官渡電銷外呼管理系統怎么收費 400開頭電話怎樣申請 江蘇呼叫中心外呼系統有效果嗎 赤峰電銷 杭州人工智能電銷機器人費用

前言

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

安裝

go get github.com/spf13/viper

如果提示找不到golang.org/x/text/這個庫,是因為golang.org/x/text/這個庫在GitHub上托管的路徑不一致。

解決辦法:

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

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

正文

初始結構目錄如下:

準備測試使用的yaml文件,注意yaml的格式十分嚴格,主要是每個冒號后面必須要有空格,數組前要加“-”號表示連續(注意減號后面也有空格),內容如下:

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()
 //設置讀取的配置文件
 v.SetConfigName("linux_config")
 //添加讀取的配置文件路徑
 v.AddConfigPath("./config/")
 //windows環境下為%GOPATH,linux環境下為$GOPATH
 v.AddConfigPath("$GOPATH/src/")
 //設置配置文件類型
 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()
 //設置讀取的配置文件
 v.SetConfigName("linux_config")
 //添加讀取的配置文件路徑
 v.AddConfigPath("./config/")
 //windows環境下為%GOPATH,linux環境下為$GOPATH
 v.AddConfigPath("$GOPATH/src/")
 //設置配置文件類型
 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參數的功能:

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)
 */
 }

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

package main 
import (
 "github.com/spf13/viper"
 "fmt"
 "golang.org/x/net/context"
 "github.com/fsnotify/fsnotify"
)
 
func main() {
 //讀取yaml文件
 v := viper.New()
 //設置讀取的配置文件
 v.SetConfigName("linux_config")
 //添加讀取的配置文件路徑
 v.AddConfigPath("./config/")
 //windows環境下為%GOPATH,linux環境下為$GOPATH
 v.AddConfigPath("$GOPATH/src/")
 //設置配置文件類型
 v.SetConfigType("yaml")
 
 if err := v.ReadInConfig(); err != nil {
 fmt.Printf("err:%s\n", err)
 }
 
 //創建一個信道等待關閉(模擬服務器環境)
 ctx, _ := context.WithCancel(context.Background())
 //cancel可以關閉信道
 //ctx, cancel := context.WithCancel(context.Background())
 //設置監聽回調函數
 v.OnConfigChange(func(e fsnotify.Event) {
 fmt.Printf("config is change :%s \n", e.String())
 //cancel()
 })
 //開始監聽
 v.WatchConfig()
 //信道不會主動關閉,可以主動調用cancel關閉
 -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
 */
}

完結

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

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

項目地址https://github.com/spf13/viper

1. viper

viper讀取配置信息的優先級順序,從高到底:

顯式調用Set函數

命令行參數

環境變量

配置文件

key/value存儲系統

默認值

2. 設置值

(1)設置默認值

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

...

(2)讀取配置文件

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

(3)***監視配置文件

viper支持應用程序運行時擁有讀取配置文件的能力

viper實例通過WatchConfig函數:

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

(4)Set調用

viper.Set("Verbose", true)

viper.Set("LogFile", LogFile)

(5)綁定命令行參數

***viper支持綁定pflags參數【pflags是一個命令行參數解析庫】

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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

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

標簽:鷹潭 黔西 武漢 宜春 河池 松原 泰安 保定

巨人網絡通訊聲明:本文標題《聊聊Golang中很好用的viper配置模塊》,本文關鍵詞  聊聊,Golang,中,很好,用的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《聊聊Golang中很好用的viper配置模塊》相關的同類信息!
  • 本頁收集關于聊聊Golang中很好用的viper配置模塊的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美优质美女网站| 成人av中文字幕| 亚洲女人小视频在线观看| 欧美激情一区二区三区四区| 精品区一区二区| 精品处破学生在线二十三| 日韩三级精品电影久久久| 日韩亚洲国产中文字幕欧美| 91精品国产91久久久久久最新毛片 | 国产精品一卡二| 国产一区二区剧情av在线| 黑人巨大精品欧美黑白配亚洲| 激情综合网av| 国产激情精品久久久第一区二区| 国产河南妇女毛片精品久久久| 国产高清无密码一区二区三区| 国产69精品久久久久毛片| jizzjizzjizz欧美| 欧美亚洲国产一区在线观看网站| 一本大道久久a久久精二百| 欧美亚洲精品一区| 精品国产在天天线2019| 国产欧美1区2区3区| 一区二区视频在线看| 午夜精品免费在线观看| 国内外成人在线| 99精品黄色片免费大全| 91精品国产一区二区三区香蕉| 欧美大片国产精品| 中文字幕五月欧美| 视频在线观看91| 国产真实乱子伦精品视频| 色综合中文字幕国产 | 国产亚洲欧美激情| 国产精品卡一卡二| 午夜欧美大尺度福利影院在线看 | 中文字幕亚洲精品在线观看| 亚洲国产综合在线| 国产麻豆成人精品| 欧美日韩国产小视频在线观看| 久久蜜桃av一区精品变态类天堂 | 久久午夜色播影院免费高清| 一区二区三区色| 国产剧情一区二区三区| 欧美精品色综合| 日韩理论电影院| 国产呦精品一区二区三区网站| 91天堂素人约啪| 久久婷婷国产综合国色天香| 亚洲一区二区四区蜜桃| 黄色资源网久久资源365| 在线观看欧美精品| 欧美激情在线看| 国产一区二区三区四区五区美女 | 久久久久久久久蜜桃| 亚洲国产日韩一区二区| 成人av资源网站| 久久久亚洲国产美女国产盗摄 | 精品福利在线导航| 亚洲成a人v欧美综合天堂下载| 国产传媒欧美日韩成人| 欧美日本一区二区三区| 亚洲激情欧美激情| 91在线播放网址| 国产欧美一区在线| 成人综合婷婷国产精品久久蜜臀 | 夜夜亚洲天天久久| 91天堂素人约啪| 亚洲三级电影网站| 99久久er热在这里只有精品15| 国产农村妇女毛片精品久久麻豆| 国产精品一区二区无线| 精品国产网站在线观看| 激情图片小说一区| 日韩精品资源二区在线| 免费不卡在线观看| 日韩欧美国产三级电影视频| 蜜桃一区二区三区在线| 欧美一级理论性理论a| 视频一区二区中文字幕| 91精品黄色片免费大全| 日韩中文字幕区一区有砖一区| 欧美三级电影网站| 欧美bbbbb| 久久亚洲春色中文字幕久久久| 国产99久久久国产精品潘金网站| 国产欧美日产一区| 成人污污视频在线观看| 亚洲日本中文字幕区| 在线免费不卡电影| 日本亚洲天堂网| 欧美精品一区二区三区四区| 国产电影一区二区三区| 国产精品人妖ts系列视频| 波多野结衣亚洲| 亚洲成人黄色影院| 欧美精品一区二区三区蜜桃| 99在线精品观看| 丝袜亚洲另类欧美综合| 久久亚洲综合av| 日本久久电影网| 裸体在线国模精品偷拍| 亚洲国产精华液网站w | 美女一区二区视频| 久久久美女毛片| 一本久久精品一区二区| 琪琪一区二区三区| 成人免费一区二区三区视频 | 日韩精品一区二区在线| 国产成人在线电影| 舔着乳尖日韩一区| 国产精品久久久久一区二区三区共| 色香蕉久久蜜桃| 国产精品一线二线三线| 亚洲国产成人91porn| 2欧美一区二区三区在线观看视频| 成人a免费在线看| 美女视频一区二区| 一区二区三区在线观看视频| 精品日韩欧美一区二区| 欧美色精品在线视频| 国产不卡在线一区| 男女性色大片免费观看一区二区| 国产精品午夜久久| 91精品国产色综合久久| 99riav久久精品riav| 国产一区 二区| 美女视频一区二区| 日日夜夜精品免费视频| 亚洲人吸女人奶水| 中文字幕不卡在线播放| 久久久久久99久久久精品网站| 精品视频在线免费看| 97se亚洲国产综合自在线不卡| 国产一区二区久久| 精品综合久久久久久8888| 日日噜噜夜夜狠狠视频欧美人 | 麻豆国产精品一区二区三区| 1000精品久久久久久久久| 亚洲精品一区二区三区香蕉 | 欧美日韩一区二区三区高清| 成人激情午夜影院| 国产精品一区二区不卡| 国内外精品视频| 国产专区综合网| 国产一区二区主播在线| 久久国产综合精品| 经典三级视频一区| 国产在线精品一区在线观看麻豆| 免费观看久久久4p| 免费在线看成人av| 久久精品国产一区二区| 麻豆成人91精品二区三区| 美女爽到高潮91| 国产精品1区2区| 成人国产一区二区三区精品| 国产91富婆露脸刺激对白| 成人一区二区三区| 不卡av在线网| 在线观看日韩毛片| 9191国产精品| 欧美精品一区二区久久久| 国产亚洲一区二区三区| 国产精品久久久久影院老司 | 亚洲美女免费视频| 一片黄亚洲嫩模| 日韩不卡免费视频| 国产精品一卡二卡在线观看| 99热99精品| 欧美喷潮久久久xxxxx| 精品国产91久久久久久久妲己| 国产视频一区不卡| 亚洲精品一卡二卡| 免费成人在线视频观看| 成人精品国产一区二区4080| 欧美在线观看视频一区二区| 欧美一区午夜精品| 日本一区二区免费在线| 亚洲一区日韩精品中文字幕| 看电视剧不卡顿的网站| 丁香另类激情小说| 日本乱人伦aⅴ精品| 欧美成人精品福利| 亚洲欧美精品午睡沙发| 久久66热偷产精品| 日本韩国精品在线| 久久综合五月天婷婷伊人| 亚洲日本丝袜连裤袜办公室| 日日欢夜夜爽一区| 9l国产精品久久久久麻豆| 日韩久久免费av| 亚洲一区二区三区四区中文字幕| 久久精品国产99久久6| 日本乱人伦aⅴ精品| 久久综合中文字幕| 丝袜诱惑亚洲看片| 在线观看一区不卡| 国产精品久久一级| 蜜桃视频在线观看一区二区| 91国产免费看|