在Go語言中,可以使用viper
庫來處理不同環境的配置文件。viper
支持多種配置文件格式(如JSON、YAML、TOML等),并允許您根據環境變量或命令行參數選擇使用哪個配置文件。以下是一個簡單的示例,說明如何使用viper
適應不同環境的配置文件。
首先,安裝viper
庫:
go get github.com/spf13/viper
然后,創建一個名為config.go
的文件,其中包含以下內容:
package main
import (
"fmt"
"github.com/spf13/viper"
)
func init() {
// 設置默認配置文件路徑和環境變量前綴
viper.SetConfigName("config") // 配置文件名(不帶擴展名)
viper.AddConfigPath(".") // 配置文件路徑
viper.SetConfigType("yaml") // 配置文件類型
viper.SetEnvPrefix("APP") // 環境變量前綴
// 讀取默認配置文件
if err := viper.ReadInConfig(); err != nil {
fmt.Println("Error reading config file:", err)
}
// 將環境變量覆蓋到配置中
viper.AutomaticEnv()
}
func getConfigValue(key string) string {
return viper.GetString(key)
}
func main() {
// 獲取不同環境的配置值
devDBHost := getConfigValue("dev.db.host")
prodDBHost := getConfigValue("prod.db.host")
fmt.Printf("Development DB Host: %s\n", devDBHost)
fmt.Printf("Production DB Host: %s\n", prodDBHost)
}
在這個示例中,我們創建了一個名為config.yaml
的默認配置文件:
# config.yaml
dev:
db:
host: localhost
prod:
db:
host: production-server
根據不同的環境,您可以創建相應的配置文件(如config_dev.yaml
和config_prod.yaml
),并在運行時選擇使用哪個配置文件。例如,設置環境變量APP_ENV=dev
將導致viper
讀取config_dev.yaml
文件。
要運行此示例,請將代碼保存到名為main.go
的文件中,并確保配置文件和代碼位于同一目錄中。然后,使用以下命令運行程序:
# 使用默認配置文件(config.yaml)
go run main.go
# 使用開發環境配置文件(config_dev.yaml)
export APP_ENV=dev && go run main.go
# 使用生產環境配置文件(config_prod.yaml)
export APP_ENV=prod && go run main.go
這將分別輸出開發環境和生產環境的數據庫主機。