package manchong import ( "github.com/go-sql-driver/mysql" "github.com/json-iterator/go" "io" "os" "sync" "time" ) type Config struct { Addr string `json:"addr"` LogLeve string `json:"log_leve"` LogFile string `json:"log_file"` Users map[string]string `json:"users"` MySQL *mysql.Config `json:"mysql"` } var CFG = Config{ Addr: ":8080", LogLeve: "info", LogFile: "", Users: nil, MySQL: mysql.NewConfig(), } var fnsL = &sync.Mutex{} var fns = make([]func(), 0, 10) func RegisterReloadConfigCall(fn func()) { fnsL.Lock() defer fnsL.Unlock() fns = append(fns, fn) fn() } func readCFG() { file, err := os.Open("config.json") if err != nil { panic(err) } bs, err := io.ReadAll(file) if err != nil { panic(err) } err = jsoniter.Unmarshal(bs, &CFG) CFG.MySQL.Loc = time.Local if err != nil { panic(err) } fnsL.Lock() defer fnsL.Unlock() for _, fn := range fns { fn() } } func init() { readCFG() }