iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
0

在前面的章節,我們介紹了可以將參數放在環境變數內,透過os.Getenv來取得參數,不過這種方式有個小問題,因為環境變數是key-value的儲存形式,所以當你有著大量參數需要管理,或是照著各種服務分類時,管理起來就會很不直覺,必須靠參數名稱去處理。
舉例來說,這是環境變數版envhttps://ithelp.ithome.com.tw/upload/images/20200910/20129607pLLZJa6hD1.png

可以看到單純mysql 的 master 跟 slave就要靠key的名稱來分類,當參數一多就會很難管理。
這個時候就輪到Viper出場了。
https://ithelp.ithome.com.tw/upload/images/20200910/20129607xVwb6C0DKr.png

Viper

viper是由go語言所編寫,用來管理跟使用設定檔的套件,
通常我們會將設定檔以.yaml的檔案類型來管理。

name: "linux"
mysql:
  master:
    host: 127.0.0.1
    port: 3306
    username: "root"
    password: "1234"
    dbname: "users"
    maxIdle: 10
    maxConn: 100
    connMaxLifetime: 30
  slave:
    host: 127.0.0.1
    port: 3306
    username: "root"
    password: "1234"
    dbname: "users"
    maxIdle: 10
    maxConn: 100
    connMaxLifetime: 30

以這種格式就可以很方便看出參數的層級與分類,舉上面範例來說,得知mysql下分類成master跟slave的參數,各自分別的參數設定就通通一目瞭然,不用在看key的名稱來分辨。
而Viper在讀取這些設定檔也非常簡單,以下圖來說:

viper.SetConfigName("config")
viper.SetConfigType("yaml") 
viper.AddConfigPath("/etc/appname/")
err := viper.ReadInConfig()

viper會依照SetConfigName指定的名稱,SetConfigType指定的檔案類型跟AddConfigPath指定的路徑去搜尋設定檔,並在viper.ReadInConfig這行將設定檔讀入記憶體內,而要取出這些參數也很簡單。

name := viper.GetString("name")
address := viper.GetString("mysql.master.host")

以上圖的方法就可以取出第一層或是第n層的參數了,如果你了解go的struct的話,改使用

viper.Unmarshal(&c)

一次全部拿出來,也是一種方式。


上一篇
Day4-設定檔
下一篇
Day6-啟動戰士 Cli
系列文
從0開始的golang web server30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言