1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【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ī)方式是每種配置源寫一套邏輯,雖然開(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)了,也在收集廣大使用者的需求和反饋。傳送門。

        參考資料 

        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)目,然后寫一點(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)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            3级毛片 日韩三级片在线 | 亚洲AV无码成人网 | 色呦呦入口| 天天狠天天爽视频 | 九九热干东京热热草 | 白嫩外女BBWBBWBBW | 欧美在线视频免费观看 | 日本欧美AAAA无码视频 | 性生交大片免6 | 看黄片入口 |