Viper
引入 1 go get github.com/spf13/viper 基础使用 设置默认值 1 2 3 viper.SetDefault("ContentDir", "content") viper.SetDefault("LayoutDir", "layouts") viper.SetDefault("Taxonomies", map[string]string{"tag": "tags", "category": "categories"}) 读取配置 1 2 3 4 5 viper.GetString("logfile") // 不区分大小写的设置和获取 if viper.GetBool("verbose") { fmt.Println("verbose enabled") } viper.GetString("datastore.metric.host") // 嵌套读取 读取子树 1 subv := viper.Sub("app.cache1") 反序列化 1 2 3 4 5 6 7 8 9 10 11 12 13 type config struct { Port int Name string PathMap string `mapstructure:"path_map"` } var C config err := viper.Unmarshal(&C) err := viper.UnmarshalKey(&C) if err != nil { t.Fatalf("unable to decode into struct, %v", err) } 读取配置文件 1 2 3 4 5 6 7 8 9 10 viper.SetConfigFile("/path/to/your/config/file") viper.SetConfigName("config") // 配置文件名称(无扩展名) // viper.SetConfigType("yaml") // 如果配置文件的名称中没有扩展名,则需要配置此项,针对远程配置 viper.AddConfigPath("/etc/appname/") // 查找配置文件所在的路径 viper.AddConfigPath("$HOME/.appname") // 多次调用以添加多个搜索路径 viper.AddConfigPath(".") // 还可以在工作目录中查找配置 err := viper.ReadInConfig() // 查找并读取配置文件 if err != nil { // 处理读取配置文件的错误 panic(fmt.Errorf("Fatal error config file: %s \n", err)) } 文件读取错误处理 ...