You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
1.5 KiB

5 years ago
package config
import (
"gopkg.in/ini.v1"
5 years ago
"live/app/lib/asset"
5 years ago
"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)
}
5 years ago
// 覆盖配置
for _, s := range asset.AssetNames() {
if err := asset.RestoreAsset(Config.WorkPath, s); err != nil {
log.Fatal("释放资源出错", err)
return
}
}
5 years ago
// 配置读取
Config.File, err = ini.Load(Config.WorkPath + "/config/app.ini")
if err != nil {
5 years ago
log.Fatal("配置文件读取失败err:", err)
return
5 years ago
}
5 years ago
Config.ValueMapper = ExpandValueEnv
5 years ago
Config.RUNMODE = Config.Section("").Key("runmode").String()
5 years ago
log.Println(Config.RUNMODE)
5 years ago
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
}