Go 語言 viper 庫上手實踐

FunTester發表於2024-08-16

在軟體開發當中,不可避免需要將配置資訊存放於配置檔案當中。在 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 自動化
  • 理論、感悟、影片
如果覺得我的文章對您有用,請隨意打賞。您的支援將鼓勵我繼續創作!
打賞支援
暫無回覆。

相關文章