config.go 990 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package manchong
  2. import (
  3. "github.com/go-sql-driver/mysql"
  4. "github.com/json-iterator/go"
  5. "io"
  6. "os"
  7. "sync"
  8. "time"
  9. )
  10. type Config struct {
  11. Addr string `json:"addr"`
  12. LogLeve string `json:"log_leve"`
  13. LogFile string `json:"log_file"`
  14. Users map[string]string `json:"users"`
  15. MySQL *mysql.Config `json:"mysql"`
  16. }
  17. var CFG = Config{
  18. Addr: ":8080",
  19. LogLeve: "info",
  20. LogFile: "",
  21. Users: nil,
  22. MySQL: mysql.NewConfig(),
  23. }
  24. var fnsL = &sync.Mutex{}
  25. var fns = make([]func(), 0, 10)
  26. func RegisterReloadConfigCall(fn func()) {
  27. fnsL.Lock()
  28. defer fnsL.Unlock()
  29. fns = append(fns, fn)
  30. fn()
  31. }
  32. func readCFG() {
  33. file, err := os.Open("config.json")
  34. if err != nil {
  35. panic(err)
  36. }
  37. bs, err := io.ReadAll(file)
  38. if err != nil {
  39. panic(err)
  40. }
  41. err = jsoniter.Unmarshal(bs, &CFG)
  42. CFG.MySQL.Loc = time.Local
  43. if err != nil {
  44. panic(err)
  45. }
  46. fnsL.Lock()
  47. defer fnsL.Unlock()
  48. for _, fn := range fns {
  49. fn()
  50. }
  51. }
  52. func init() {
  53. readCFG()
  54. }