config.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // Copyright 2019 getensh.com. All rights reserved.
  2. // Use of this source code is governed by getensh.com.
  3. package parser
  4. import (
  5. "fmt"
  6. "path/filepath"
  7. "strings"
  8. "property-household-gateway/config"
  9. "github.com/fsnotify/fsnotify"
  10. "github.com/spf13/viper"
  11. )
  12. var v *viper.Viper
  13. var Conf *config.Configure
  14. // LoadConfig 装载配置文件
  15. func LoadConfig(filename string) error {
  16. configPath, configName := filepath.Split(filename)
  17. fileList := strings.Split(configName, ".")
  18. if len(fileList) < 2 {
  19. return fmt.Errorf("%s", "文件格式不正确")
  20. }
  21. configName = fileList[0]
  22. fileExt := fileList[1]
  23. var err error
  24. if fileExt == "json" {
  25. err = LoadConfigFromJson(configName, configPath)
  26. } else if fileExt == "yaml" || fileExt == "yml" {
  27. err = LoadConfigFromYaml(configName, configPath)
  28. } else {
  29. err = fmt.Errorf("%s", "不支持的文件格式")
  30. }
  31. // 出错直接返回
  32. if err != nil {
  33. return err
  34. }
  35. // 设置文件监听函数
  36. v.OnConfigChange(func(e fsnotify.Event) {
  37. fmt.Printf("配置文件有变化, Event:%s \n", e.String())
  38. parseConfig()
  39. Handle()
  40. })
  41. // 监听
  42. v.WatchConfig()
  43. return nil
  44. }
  45. // LoadConfigFromYaml 装载yaml类型的配置文件
  46. func LoadConfigFromYaml(configName, configPath string) error {
  47. v = viper.New()
  48. v.SetConfigName(configName)
  49. v.AddConfigPath(configPath)
  50. //设置配置文件类型
  51. v.SetConfigType("yaml")
  52. if err := v.ReadInConfig(); err != nil {
  53. return err
  54. }
  55. return parseConfig()
  56. }
  57. // LoadConfigFromJson 装载json类型的配置文件
  58. func LoadConfigFromJson(configName, configPath string) error {
  59. v = viper.New()
  60. v.SetConfigName(configName)
  61. v.AddConfigPath(configPath)
  62. //设置配置文件类型
  63. v.SetConfigType("json")
  64. if err := v.ReadInConfig(); err != nil {
  65. return err
  66. }
  67. return parseConfig()
  68. }
  69. func parseConfig() error {
  70. Conf = &config.Configure{}
  71. if err := v.Unmarshal(Conf); err != nil {
  72. return err
  73. }
  74. return nil
  75. }