【GoCN酷Go推薦】Go程序配置利器-viper庫(kù)
推薦理由
日常開(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)單的,主要的代碼流程大致如下:
初始化viper,可以使用單個(gè)viper實(shí)例,也可以多個(gè)viper實(shí)例
針對(duì)不同的配置源設(shè)置相對(duì)應(yīng)的參數(shù),如:配置文件路徑,文件類型,ectd/consul服務(wù)器訪問(wèn)地址和key等
讀取配置項(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介紹

