「原創宣告:保留所有權利,禁止轉載」
在軟體開發當中,不可避免需要將配置資訊存放於配置檔案當中。在 Java
專案當中,Spring
提供了非常強大的配置檔案管理能力,這裡就不多說了。今天分享一下 Go
語言中的配置檔案管理類——viper
。
Viper 介紹
Viper
是 Go 語言中的一個流行配置管理庫,它由開源社群開發並維護。它的主要功能是讀取和解析各種配置檔案(如 JSON、TOML、YAML、HCL 和 ENV 檔案),並將這些配置值提供給應用程式。
Viper 功能還是很強大的,還支援優先順序管理、自動過載配置、巢狀配置等等,而且簡單易用。如果你使用 Go
語言開發專案需要配置管理,Viper
是不二的選擇。
現在我們來進行 Viper
庫的上手實踐內容。
安裝
開啟終端並執行以下命令來安裝 Viper
:
go get github.com/spf13/viper
簡單的例子
下面是一個 Viper
使用的簡單例子:
package main
import (
"fmt"
"github.com/spf13/viper")
func main() {
viper.SetConfigName("config") // 配置檔名稱(無字尾)
viper.AddConfigPath("./conf") // 配置檔案路徑,
viper.SetConfigType("yaml") // 配置檔案字尾, 也可以是 json, toml, yaml, yml 等, 不設定則自動識別
// 讀取配置檔案, 如果出錯則退出
if err := viper.ReadInConfig(); err != nil {
fmt.Printf("Error reading config file, %s\n", err)
return
}
// 獲取配置值
appName := viper.GetString("app.name") // 讀取字串
port := viper.GetInt("app.port") // 讀取整型
fmt.Printf("App Name: %s\n", appName)
fmt.Printf("Port: %d\n", port)
}
我的 config.yaml
配置檔案內容如下:
app:
name: "FunTester"
port: 8080
控制檯列印:
App Name: FunTester
Port: 8080
其他
設定預設值
可以為配置項設定預設值,如果配置檔案中沒有指定該項,則使用預設值。使用語法:
viper.SetDefault("app.port", 8080)
自動過載
支援監視配置檔案的變化,並在檔案更改時自動重新載入配置。使用語法:
viper.WatchConfig()
viper.OnConfigChange(func(e fsnotify.Event) {
fmt.Println("配置檔案變更:", e.Name)
})
繫結環境變數
允許將環境變數與配置項繫結,使得環境變數可以覆蓋配置檔案中的值。使用語法:
viper.BindEnv("app.port", "APP_PORT")
合併配置
可以將多個配置檔案合併,允許配置分散在多個檔案中。使用語法:
viper.SetConfigName("config")
viper.AddConfigPath(".")
viper.MergeInConfig()
動態賦值
可以透過程式設計方式動態設定和更新配置項。使用語法:
viper.Set("app.name", "New FunTester")
配置解析
支援將配置解析到結構體中,方便對複雜配置的管理。使用語法:
type Config struct {
App struct {
Name string
Port int
}
}
var config Config
if err := viper.Unmarshal(&config); err != nil {
log.Fatalf("Unable to decode into struct: %v", err)
}
Viper
是一個功能全面、靈活且易於使用的配置管理庫,適合各種規模的 Go 專案。它不僅支援多種配置格式,還提供了豐富的功能,如優先順序管理、自動過載、動態配置等,幫助開發者高效地管理應用程式的配置。無論是簡單的應用程式還是複雜的系統,Viper
都能提供強大的配置管理支援。
FunTester 原創精華
- 服務端功能測試
- 效能測試專題
- Java、Groovy、Go
- 白盒、工具、爬蟲、UI 自動化
- 理論、感悟、影片
如果覺得我的文章對您有用,請隨意打賞。您的支援將鼓勵我繼續創作!
打賞支援
暫無回覆。