项目地址
设置键值
设置值
viper.Set("key", "value")
viper.Set("keys", map[string]string{"key1": "value1", "key2": "value2"})设置默认值
viper.SetDefault("key", "value")
viper.SetDefault("keys", map[string]string{"key1": "value1", "key2": "value2"})使用别名
设置后对value和lueva进行赋值和取值的结果是相同的。
viper.RegisterAlias("value", "lueva")读取键值
读取单个键值
viper.GetString("key")
viper.GetBool("key")
viper.GetInt("key")读取嵌套键值
如果存在键为key.subkey.subsubkey,那么优先读取这个键,而不是路径。
viper.GetString("key.subkey.subsubkey")读取数组
读取数组第一个值。
viper.GetString("key.subkey.0")方法列表
| 方法列表 |
|---|
| Get(key string) : any |
| GetBool(key string) : bool |
| GetFloat64(key string) : float64 |
| GetInt(key string) : int |
| GetIntSlice(key string) : []int |
| GetString(key string) : string |
| GetStringMap(key string) : map[string]any |
| GetStringMapString(key string) : map[string]string |
| GetStringSlice(key string) : []string |
| GetTime(key string) : time.Time |
| GetDuration(key string) : time.Duration |
| IsSet(key string) : bool |
| AllSettings() : map[string]any |
读取配置文件
设置路径
viper.AddConfigPath(".")设置文件名
viper.SetConfigName("config")设置文件后缀
viper.SetConfigType("json")导入配置
err := viper.ReadInConfig()保存配置文件
预定义路径
覆盖当前配置文件
将当前viper配置写入预定义的文件路径。如果预定义文件路径存在,则覆盖该文件;如果预定义文件路径不存在,则产生一个error。
viper.WriteConfig()创建新的文件
当前viper配置写入预定义的文件路径。如果预定义文件路径存在,则产生一个error;如果预定义文件路径不存在,则会创建文件并写入。
viper.SafeWriteConfig()指定路径
覆盖当前配置文件
将当前viper配置写入给定的文件路径。如果给定文件路径存在,则覆盖该文件;如果给定文件路径不存在,则会产生一个error。
viper.WriteConfigAs("./config")创建新的文件
将当前viper配置写入给定的文件路径。如果给定文件路径存在,则产生一个error;如果给定文件路径不存在,则会创建文件并写入。
viper.SafeWriteConfigAs("./config")获取子配置
如果key对应的value包含新的键值对,则可以将其提取出来作为子配置。
subViper := viper.Sub("key")解码到结构体
type config struct {
Port int
Name string
PathMap string `mapstructure:"path_map"`
}
var C config
err := viper.Unmarshal(&C)
if err != nil {
t.Fatalf("unable to decode into struct, %v", err)
}多个Viper实例
x := viper.New()
y := viper.New()使用环境变量
为所有的key都加上一个前缀,不分大小写。
func main() {
viper.SetEnvPrefix("per")
_ = viper.BindEnv("id")
_ = os.Setenv("PER_ID", "13")
fmt.Println("id:", viper.Get("id"))
}使用flag
serverCmd.Flags().Int("port", 1138, "Port to run Application server on")
viper.BindPFlag("port", serverCmd.Flags().Lookup("port"))pflag.Int("flagname", 1234, "help message for flagname")
pflag.Parse()
viper.BindPFlags(pflag.CommandLine)
i := viper.GetInt("flagname")