# 簡介

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 語言設定管理庫,可以幫助開發者更好地管理應用程式的設定。

更新於

請我喝咖啡~( ̄▽ ̄)~*