package config import ( "gopkg.in/ini.v1" "live/app/lib/asset" "log" "os" ) var Config config type config struct { *ini.File RUNMODE string WorkPath string } func init() { var err error Config.WorkPath, err = os.Getwd() if err != nil { panic(err) } // 覆盖配置 for _, s := range asset.AssetNames() { if err := asset.RestoreAsset(Config.WorkPath, s); err != nil { log.Fatal("释放资源出错", err) return } } // 配置读取 Config.File, err = ini.Load(Config.WorkPath + "/config/app.ini") if err != nil { log.Fatal("配置文件读取失败,err:", err) return } Config.ValueMapper = ExpandValueEnv Config.RUNMODE = Config.Section("").Key("runmode").String() log.Println(Config.RUNMODE) if Config.RUNMODE != "" { Config.Append(Config.WorkPath + "/config/app." + Config.RUNMODE + ".ini") } } func ExpandValueEnv(value string) (realValue string) { realValue = value vLen := len(value) // 3 = ${} if vLen < 3 { return } // Need start with "${" and end with "}", then return. if value[0] != '$' || value[1] != '{' || value[vLen-1] != '}' { return } key := "" defaultV := "" // value start with "${" for i := 2; i < vLen; i++ { if value[i] == '|' && (i+1 < vLen && value[i+1] == '|') { key = value[2:i] defaultV = value[i+2 : vLen-1] // other string is default value. break } else if value[i] == '}' { key = value[2:i] break } } realValue = os.Getenv(key) if realValue == "" { realValue = defaultV } return }