package config import ( "github.com/spf13/viper" _ "github.com/spf13/viper/remote" "github.com/zeromicro/go-zero/zrpc" ) const ( TypeKey = "CONFIG_TYPE" // 配置文件类型 TypeEtcd = "etcd" TypeEnv = "env" EtcdPrefix = "/youtu/" EtcdAddrKey = "ETCD_ADDR" ) type Redis struct { Host string `json:"host"` Password string `json:"password"` } type AppAccount struct { AppId string `json:"appId"` Secret string `json:"secret"` Type string `json:"type"` } type Config struct { RpcServerConf zrpc.RpcServerConf Mode string Mysql string Redis []Redis } func init() { viper.SetDefault(EtcdAddrKey, "192.168.0.47:2379") viper.SetDefault(TypeKey, TypeEtcd) } func GetConfig(c *Config, serverName string) (err error) { err = viper.AddRemoteProvider("etcd3", viper.GetString(EtcdAddrKey), EtcdPrefix+serverName+".rpc") if err != nil { return } viper.SetConfigType("json") // because there is no file extension in a stream of bytes, supported extensions are "json", "toml", "yaml", "yml", "properties", "props", "prop", "env", "dotenv" err = viper.ReadRemoteConfig() if err != nil { return } err = viper.Unmarshal(&c) if err != nil { return } c.RpcServerConf.Name = serverName + ".rpc" c.RpcServerConf.ServiceConf.Mode = c.Mode return }