<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【GoCN酷Go推薦】Go程序配置利器-viper庫(kù)

          共 3064字,需瀏覽 7分鐘

           ·

          2021-04-10 11:23

          推薦理由

          日常開(kāi)發(fā)中,程序配置項(xiàng)會(huì)包含多種源,如:配置文件,系統(tǒng)環(huán)境變量、分布式config服務(wù)等等,常規(guī)方式是每種配置源寫(xiě)一套邏輯,雖然開(kāi)發(fā)量不大,但總要花精力去維護(hù)后續(xù)的變更。Viper庫(kù)恰好能解決這類痛點(diǎn),同時(shí)還支持多種配置文件格式,以及熱加載能力,所以程序配置管理場(chǎng)景可以嘗試用Viper庫(kù)。

          功能介紹

          Viper具體功能特性如下:

          • 設(shè)置配置項(xiàng)默認(rèn)值
          • 支持顯式設(shè)置配置項(xiàng)
          • 支持讀取JSON、TOML、YAML、HCL、envfile和Java properties等配置格式
          • 支持讀取環(huán)境變量
          • 支持讀取etcd、Consul等分布式配置服務(wù)
          • 支持讀取命令行參數(shù)
          • 支持讀取內(nèi)存
          • 配置熱加載

          使用指南 

          Viper使用起來(lái)也是比較簡(jiǎn)單的,主要的代碼流程大致如下:

          1. 初始化viper,可以使用單個(gè)viper實(shí)例,也可以多個(gè)viper實(shí)例

          2. 針對(duì)不同的配置源設(shè)置相對(duì)應(yīng)的參數(shù),如:配置文件路徑,文件類型,ectd/consul服務(wù)器訪問(wèn)地址和key等

          3. 讀取配置項(xiàng),可以直接使用viper.GetXXX()方法獲取某個(gè)具體配置項(xiàng),也可以所以或部分配置項(xiàng)反序列化為struct或map

          以讀取配置文件為例,配置文件內(nèi)容:

          Hacker: true
          name: steve
          hobbies:
          - skateboarding
          - snowboarding
          - go
          clothing:
            jacket: leather
            trousers: denim
          age: 35
          eyes : brown
          beard: true

          代碼:

          package main

          import (
              "fmt"
              "log"

              "github.com/spf13/viper"
          )

          func main() {
              viper.SetConfigName("config"// 配置文件名稱
              viper.SetConfigType("yaml"// 文件名無(wú)擴(kuò)展名,需要顯式指定
              viper.AddConfigPath("/etc/appname/")   // 配置文件搜索路徑
              viper.AddConfigPath("$HOME/.appname")  // 多次調(diào)用以添加多個(gè)
              viper.AddConfigPath(".")               // 也可以設(shè)置為工作目錄
              if err := viper.ReadInConfig(); err != nil {
                  if _, ok := err.(viper.ConfigFileNotFoundError); ok {
                      // Config file not found; ignore error if desired
                  } else {
                      // Config file was found but another error was produced
                  }
                  log.Fatal(err)
              }
              fmt.Println("獲取配置文件的Hacker", viper.GetBool("hacker"))
              fmt.Println("獲取配置文件的hobbies", viper.GetStringSlice("hobbies"))
              fmt.Println("獲取配置文件的clothing.jacket", viper.GetString(`clothing.jacket`))
          }

          更詳細(xì)的使用可以參考Viper官方文檔

          總結(jié) 

          日常開(kāi)發(fā)中程序配置管理的絕大部分場(chǎng)景都可以使用Viper,實(shí)際使用中也可以對(duì)Viper二次封裝,來(lái)支持讀取更多平臺(tái)的遠(yuǎn)程文件。

          最后Viper v2啟動(dòng)了,也在收集廣大使用者的需求和反饋。傳送門(mén)。

          參考資料 

          https://github.com/spf13/viper

          還想了解更多嗎?

          更多請(qǐng)查看:https://github.com/spf13/viper

          歡迎加入我們GOLANG中國(guó)社區(qū):https://gocn.vip/


          《酷Go推薦》招募:


          各位Gopher同學(xué),最近我們社區(qū)打算推出一個(gè)類似GoCN每日新聞的新欄目《酷Go推薦》,主要是每周推薦一個(gè)庫(kù)或者好的項(xiàng)目,然后寫(xiě)一點(diǎn)這個(gè)庫(kù)使用方法或者優(yōu)點(diǎn)之類的,這樣可以真正的幫助到大家能夠?qū)W習(xí)到新的庫(kù),并且知道怎么用。


          大概規(guī)則和每日新聞?lì)愃疲绻麍?bào)名人多的話每個(gè)人一個(gè)月輪到一次,歡迎大家報(bào)名!


          點(diǎn)擊 閱讀原文 即刻報(bào)名


          — 往期回顧 —

          GoCN酷Go推薦】Goroutine 泄漏防治神器 goleak

          【GoCN酷Go推薦】protobuf生成Go代碼插件gogo/protobuf

          【GoCN酷Go推薦】網(wǎng)絡(luò)流量抓包庫(kù) gopacket介紹



          瀏覽 73
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  最新中文字幕在线观看 | 大鸡巴日逼网站 | 中文在线字 | 伊人成年网站综合网 | 黄色无码网站 |