package conf import ( "NaiveBotRouter/pkg/log" "NaiveBotRouter/pkg/util" "encoding/json" "github.com/BurntSushi/toml" "os" ) type Config struct { Common Common Servers map[string]Server } type Common struct { Name string } type Server struct { Addr string } var ( GlobalConfig Config BackendConfig Server ) // 释放默认配置文件 func releaseConfig(file string, config Config) { f, err := util.CreateNestedFile(file) if err != nil { log.Log.Fatalf("failed to create default config: %s", err.Error()) } encoder := toml.NewEncoder(f) err = encoder.Encode(config) if err != nil { log.Log.Fatalf("internal - encoding toml: %s", err.Error()) } } func InitConfig(file string) { GlobalConfig = defaultConfig if util.NotExists(file) { // 默认配置文件不存在则创建 if file == "config.toml" { releaseConfig(file, GlobalConfig) log.Log.Infof("default config created") } else { log.Log.Fatalf("config file not exists: %s", file) os.Exit(1) } } // 解析配置文件 _, err := toml.DecodeFile(file, &GlobalConfig) if err != nil { log.Log.Fatalf("toml decoding error: %s", err.Error()) } // 验证必须的字段 if v, ok := GlobalConfig.Servers["backend"]; ok { BackendConfig = v } else { log.Log.Fatalf("mission required field: servers.backend") } jsonConfig, err := json.Marshal(GlobalConfig) if err == nil { log.Log.Debugf("config loaded: %s", string(jsonConfig)) } }