golang-viper 配置文件使用简介

install

1
go get github.com/spf13/viper

配置项优先级

  • 显式调用 Set
  • flag
  • env
  • config
  • key/value store
  • default

简单示例

1
2
3
4
5
6
7
8
9
10
11
12
13
viper.SetConfigName("config") // 不要写扩展名,不然找不到文件。看样子又是个bug v1.11.0
viper.SetConfigType("yaml") // 配置文件扩展名,必须写,不然找不到文件
viper.AddConfigPath("/etc/appname/") // 增加配置文件搜索路径
viper.AddConfigPath("$HOME/.appname") // 可以增加多个路径
viper.AddConfigPath(".") // 在当前路径中寻找
err := viper.ReadInConfig() // 查找和读取
if err != nil { // 异常处理
if errors.As(err, new(viper.ConfigFileNotFoundError)) {
viper.WriteConfigAs("config.yaml") // 配置文件未找到,创建默认配置
} else {
log.Fatal(err) // 其他错误
}
}

写入配置

  • WriteConfig 写到预定义的位置,文件不存在会报错
  • SafeWriteConfig 写到预定义位置,创建文件,文件存在不会覆盖
  • WriteConfigAs 写到指定位置,创建文件,覆盖文件
  • SafeWriteConfigAs 写到指定位置,创建文件,不会覆盖文件

踩坑

control characters are not allowed

检查配置文件夹下是否有和配置文件 文件名 相同扩展名不同的文件

viper 配合 cobra 使用 参照 [golang-cobra 使用教程](https://www.szerr.cn/blog/code/golang-cobra 使用教程/)

本作品采用 知识共享许可协议 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。