在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
这将分别输出开发环境和生产环境的数据库主机。