Viper 使用教程(包含 .env 文件格式)
介绍
github.com/spf13/viper
是一个流行的 Go 语言配置管理库,支持多种配置文件格式,包括 .env
文件。.env
文件通常用于存储环境变量,适合在开发和生产环境中管理配置。
安装
在项目中使用 Viper,首先需要安装该库:
go get github.com/spf13/viper
基本用法
1. 导入包
在您的 Go 文件中导入 viper
包:
import (
"fmt"
"log"
"github.com/spf13/viper"
)
2. 创建 .env 文件
创建一个 .env
文件,内容如下:
APP_NAME=MyApp
APP_VERSION=1.0.0
APP_PORT=8080
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USER=admin
DATABASE_PASSWORD=secret
3. 初始化 Viper
在代码中初始化 Viper,设置环境变量的前缀(可选):
func main() {
viper.SetConfigName(".env") // 配置文件名(不带扩展名)
viper.SetConfigType("env") // 配置文件类型
viper.AddConfigPath(".") // 配置文件路径
// 读取配置文件
if err := viper.ReadInConfig(); err != nil {
log.Fatalf("无法读取配置文件: %v", err)
}
}
4. 读取配置
使用 Viper 读取配置项:
appName := viper.GetString("APP_NAME")
appVersion := viper.GetString("APP_VERSION")
appPort := viper.GetInt("APP_PORT")
fmt.Printf("应用名称: %s\n", appName)
fmt.Printf("应用版本: %s\n", appVersion)
fmt.Printf("应用端口: %d\n", appPort)
5. 读取嵌套配置
虽然 .env
文件通常不支持嵌套结构,但您可以通过使用下划线来模拟嵌套。例如:
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USER=admin
DATABASE_PASSWORD=secret
读取这些配置项:
dbHost := viper.GetString("DATABASE_HOST")
dbPort := viper.GetInt("DATABASE_PORT")
dbUser := viper.GetString("DATABASE_USER")
dbPassword := viper.GetString("DATABASE_PASSWORD")
fmt.Printf("数据库主机: %s\n", dbHost)
fmt.Printf("数据库端口: %d\n", dbPort)
fmt.Printf("数据库用户: %s\n", dbUser)
fmt.Printf("数据库密码: %s\n", dbPassword)
6. 设置默认值
可以为配置项设置默认值:
viper.SetDefault("APP_PORT", 8080) // 设置默认端口
7. 支持环境变量
Viper 可以从环境变量中读取配置项:
viper.AutomaticEnv() // 自动读取环境变量
viper.SetEnvPrefix("myapp") // 设置环境变量前缀
// 读取环境变量
dbHost := viper.GetString("DATABASE_HOST")
8. 监听配置变化
Viper 支持动态监听配置文件的变化(适用于热重载):
viper.WatchConfig() // 监听配置文件变化
viper.OnConfigChange(func(e fsnotify.Event) {
fmt.Println("配置文件已更改:", e.Name)
})
总结
github.com/spf13/viper
是一个功能强大的配置管理库,适合用于 Go 应用程序中的配置管理。它支持多种配置文件格式,包括 .env
文件,允许您轻松管理环境变量和应用配置。
参考文档
如果您有其他问题或需要进一步的帮助,请告诉我!