Viper
## 项目地址 > https://github.com/spf13/viper ## 设置键值 ### 设置值 ```go viper.Set("key", "value") viper.Set("keys", map[string]string{"key1": "value1", "key2": "value2"}) ``` ### 设置默认值 ```go viper.SetDefault("key", "value") viper.SetDefault("keys", map[string]string{"key1": "value1", "key2": "value2"}) ``` ### 使用别名 设置后对`value`和`lueva`进行赋值和取值的结果是相同的。 ```go viper.RegisterAlias("value", "lueva") ``` ## 读取键值 ### 读取单个键值 ```go viper.GetString("key") viper.GetBool("key") viper.GetInt("key") ``` ### 读取嵌套键值 如果存在键为`key.subkey.subsubkey`,那么优先读取这个键,而不是路径。 ```go viper.GetString("key.subkey.subsubkey") ``` ### 读取数组 读取数组第一个值。 ```go 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 | ## 读取配置文件 ### 设置路径 ```go viper.AddConfigPath(".") ``` ### 设置文件名 ```go viper.SetConfigName("config") ``` ### 设置文件后缀 ```go viper.SetConfigType("json") ``` ### 导入配置 ```go err := viper.ReadInConfig() ``` ## 保存配置文件 ### 预定义路径 #### 覆盖当前配置文件 将当前`viper`配置写入预定义的文件路径。如果预定义文件路径存在,则覆盖该文件;如果预定义文件路径不存在,则产生一个`error`。 ```go viper.WriteConfig() ``` #### 创建新的文件 当前`viper`配置写入预定义的文件路径。如果预定义文件路径存在,则产生一个`error`;如果预定义文件路径不存在,则会创建文件并写入。 ```go viper.SafeWriteConfig() ``` ### 指定路径 #### 覆盖当前配置文件 将当前`viper`配置写入给定的文件路径。如果给定文件路径存在,则覆盖该文件;如果给定文件路径不存在,则会产生一个`error`。 ```go viper.WriteConfigAs("./config") ``` #### 创建新的文件 将当前`viper`配置写入给定的文件路径。如果给定文件路径存在,则产生一个`error`;如果给定文件路径不存在,则会创建文件并写入。 ```go viper.SafeWriteConfigAs("./config") ``` ## 获取子配置 如果`key`对应的`value`包含新的键值对,则可以将其提取出来作为子配置。 ```go subViper := viper.Sub("key") ``` ## 解码到结构体 ```go 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实例 ```go x := viper.New() y := viper.New() ``` ## 使用环境变量 为所有的key都加上一个前缀,不分大小写。 ```go func main() { viper.SetEnvPrefix("per") _ = viper.BindEnv("id") _ = os.Setenv("PER_ID", "13") fmt.Println("id:", viper.Get("id")) } ``` ## 使用flag ```go serverCmd.Flags().Int("port", 1138, "Port to run Application server on") viper.BindPFlag("port", serverCmd.Flags().Lookup("port")) ``` ```go pflag.Int("flagname", 1234, "help message for flagname") pflag.Parse() viper.BindPFlags(pflag.CommandLine) i := viper.GetInt("flagname") ```
创建时间:2024-01-02
|
最后修改:2024-01-02
|
©允许规范转载
酷酷番茄
首页
文章
友链