概要
Viper 是一个流行的 Go 配置管理库,它可以读取各种格式的配置文件,包括 YAML。下面是一个使用 Viper 读取 YAML 配置文件的基本示例。
1. viper的安装
go get github.com/spf13/viper
2. 准备 YAML 配置文件
准备一个config.yaml
配置文件
server:
address: "localhost"
port: 8080
database:
user: "dbuser"
password: "dbpass"
name: "dbname"
3. 读取YAML配置文件
定义结构体
type Config struct {
Server struct {
Address string `mapstructure:"address"`
Port int `mapstructure:"port"`
} `mapstructure:"server"`
Database struct {
User string `mapstructure:"user"`
Password string `mapstructure:"password"`
Name string `mapstructure:"name"`
} `mapstructure:"database"`
}
读取配置信息并反解到结构体中
// 设置 Viper 的配置文件名和路径
viper.SetConfigName("config") // 不需要文件扩展名
viper.SetConfigType("yaml") // 配置文件的类型
viper.AddConfigPath(".") // 配置文件的路径
// 读取配置文件
if err := viper.ReadInConfig(); err != nil {
log.Fatalf("Error reading config file, %s", err)
}
// 定义结构体
var config Config
// 反解配置到结构体
if err := viper.Unmarshal(&config); err != nil {
log.Fatalf("Unable to decode into struct, %v", err)
}
// 打印配置
fmt.Printf("Server Address: %s\n", config.Server.Address)
fmt.Printf("Server Port: %d\n", config.Server.Port)
fmt.Printf("Database User: %s\n", config.Database.User)
fmt.Printf("Database Password: %s\n", config.Database.Password)
fmt.Printf("Database Name: %s\n", config.Database.Name)
小结
viper.Unmarshal
方法非常强大,可以将配置文件中的内容直接映射到 Go 结构体中,使得配置管理变得简单且类型安全。通过这种方式,你可以轻松处理复杂的配置文件。