go get github.com/spf13/viper
1. 设置配置文件的信息
etcd:ip: "192.168.6.106"port: 2379dialTimeout: 3redis:ip: "192.168.6.107"port: 6379password: "root@1028"
2. 读取配置文件的信息
2.1 通过kv的方式
package mainimport ("fmt""github.com/spf13/viper""log"
)func main() {v := viper.New()v.SetConfigName("config") // 指定配置文件的名称v.SetConfigType("yaml") // 指定配置文件的类型v.AddConfigPath("./config") // 指定配置文件所在的目录err := v.ReadInConfig() // 加载配置文件信息if err != nil {log.Fatal(err)}etcdIP := v.Get("etcd.ip")etcdPort := v.Get("etcd.port")etcdDialTimeout := v.Get("etcd.dialTimeout")fmt.Println(etcdIP, etcdPort, etcdDialTimeout)redisIP := v.Get("redis.ip")redisPort := v.Get("redis.port")redisPassword := v.Get("redis.password")fmt.Println(redisIP, redisPort, redisPassword)
}
2.2 通过结构体的方式
通过结构体映射配置文件的信息,viper通过mapstructure标签来匹配对应的字段。
package mainimport ("fmt""github.com/spf13/viper""log"
)type Config struct {EtcdConfig EtcdConfig `json:"etcd_config" mapstructure:"etcd"`RedisConfig RedisConfig `json:"redis_config" mapstructure:"redis"`
}type EtcdConfig struct {IP string `json:"ip" mapstructure:"ip"`Port int `json:"port" mapstructure:"port"`DialTimeout int `json:"dial_timeout" mapstructure:"dial_timeout"`
}type RedisConfig struct {IP string `json:"ip" mapstructure:"ip"`Port int `json:"port" mapstructure:"port"`Password string `json:"password" mapstructure:"password"`
}func main() {v := viper.New()v.SetConfigName("config") // 指定配置文件的名称v.SetConfigType("yaml") // 指定配置文件的类型v.AddConfigPath("./config") // 指定配置文件所在的目录err := v.ReadInConfig() // 加载配置文件信息if err != nil {log.Fatal(err)}var cfg Configif err := v.Unmarshal(&cfg); err != nil {log.Fatal(err)}fmt.Printf("%+v\n", cfg.EtcdConfig)fmt.Printf("%+v\n", cfg.RedisConfig)
}