package config import ( "encoding/json" "fmt" "git.icechen.cn/monorepo/backend/pkg/env" "git.icechen.cn/monorepo/backend/pkg/etcd" "github.com/pkg/errors" "reflect" ) const ( prefix = "/config" envKey = "/env" ) type Env string const ( EnvTest Env = "test" EnvOnl Env = "onl" ) // GetConfig 根据etcd获取存入配置 func GetConfig(config interface{}) error { return Bind("config", config) } // GetMysql 获取数据库连接字符串 func GetMysql() (string, error) { return GetString("mysql") } // Bind 读取配置项到结构体 func Bind(item string, out interface{}) error { if reflect.TypeOf(out).Kind() != reflect.Ptr { return errors.New("bind对象不是指针类型") } key := fmt.Sprintf("%s/%s/%s/%s", prefix, env.Namespace, env.GetAppNameWithType(), item) value, err := etcd.GetValue(key) if err != nil { return err } err = json.Unmarshal([]byte(value), out) if err != nil { return errors.WithMessage(err, "etcd配置解析到json失败") } return nil } // GetString 读取配置项字符串 func GetString(item string) (string, error) { key := fmt.Sprintf("%s/%s/%s/%s", prefix, env.Namespace, env.GetAppNameWithType(), item) return etcd.GetValue(key) } // GetEnv 获取环境 func GetEnv() (Env, error) { envString, err := etcd.GetValue(envKey) return Env(envString), err } // IsTest 是否是测试环境 func IsTest() bool { envString, _ := GetEnv() return envString == EnvTest } // IsOnl 是否是正式环境 func IsOnl() bool { envString, _ := GetEnv() return envString == EnvOnl }