# 簡介
Viper 是一個強大的 Go 語言設定管理庫,它支援多種格式的設定檔案,如 JSON、YAML、TOML、INI 等,並提供了許多實用的功能,如設定檔自動載入、環境變數識別、命令列參數讀取等。本篇筆記將介紹如何使用 Viper 來管理應用程式的設定。
# 安裝與初始化
首先,我們需要安裝 Viper 套件:
go get -u github.com/spf13/viper |
然後在程式碼中引入 Viper:
import "github.com/spf13/viper" |
接下來,我們初始化 Viper 實例:
func init() { | |
viper.SetConfigName("config") // 設定設定檔名稱 | |
viper.SetConfigType("yaml") // 設定設定檔格式為 YAML | |
viper.AddConfigPath(".") // 設定設定檔搜尋路徑為當前目錄 | |
viper.AutomaticEnv() // 開啟環境變數識別 | |
} |
# 讀取設定檔
現在我們可以使用 viper.ReadInConfig()
來讀取設定檔:
err := viper.ReadInConfig() | |
if err != nil { | |
panic(fmt.Errorf("Fatal error config file: %w", err)) | |
} |
# 使用設定
讀取設定檔後,我們可以使用 Viper 提供的各種方法來獲取設定值:
// 讀取 string 類型的設定 | |
dbHost := viper.GetString("db.host") | |
// 讀取 int 類型的設定 | |
dbPort := viper.GetInt("db.port") | |
// 讀取 bool 類型的設定 | |
debug := viper.GetBool("debug") |
# 使用範例
假設我們有一個 config.yaml
設定檔:
db: | |
host: localhost | |
port: 3306 | |
debug: true |
我們可以使用以下程式碼來讀取並使用這些設定:
package main | |
import ( | |
"fmt" | |
"github.com/spf13/viper" | |
) | |
func init() { | |
viper.SetConfigName("config") | |
viper.SetConfigType("yaml") | |
viper.AddConfigPath(".") | |
viper.AutomaticEnv() | |
} | |
func main() { | |
err := viper.ReadInConfig() | |
if err != nil { | |
panic(fmt.Errorf("Fatal error config file: %w", err)) | |
} | |
dbHost := viper.GetString("db.host") | |
dbPort := viper.GetInt("db.port") | |
debug := viper.GetBool("debug") | |
fmt.Printf("DB Host: %s\\nDB Port: %d\\nDebug: %t\\n", dbHost, dbPort, debug) | |
} |
執行上述程式碼,輸出將會是:
DB Host: localhost
DB Port: 3306
Debug: true
# 其他功能
Viper 還提供了許多其他實用的功能,如:
- 設定值綁定到 struct
- 熱更新設定值
- 設定值預設值設定
- 設定值合併
這些功能的使用方式可以參考 Viper 的官方文件。
總之,Viper 是一個非常強大且易於使用的 Go 語言設定管理庫,可以幫助開發者更好地管理應用程式的設定。