config.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. "adm-task/config"
  6. "fmt"
  7. "path/filepath"
  8. "strings"
  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. fmt.Println("file_name:", filename)
  17. configPath, configName := filepath.Split(filename)
  18. fileList := strings.Split(configName, ".")
  19. if len(fileList) < 2 {
  20. return fmt.Errorf("%s", "文件格式不正确")
  21. }
  22. configName = fileList[0]
  23. fileExt := fileList[1]
  24. var err error
  25. if fileExt == "json" {
  26. err = LoadConfigFromJson(configName, configPath)
  27. } else if fileExt == "yaml" || fileExt == "yml" {
  28. err = LoadConfigFromYaml(configName, configPath)
  29. } else {
  30. err = fmt.Errorf("%s", "不支持的文件格式")
  31. }
  32. // 出错直接返回
  33. if err != nil {
  34. return err
  35. }
  36. // 设置文件监听函数
  37. v.OnConfigChange(func(e fsnotify.Event) {
  38. fmt.Printf("配置文件有变化, Event:%s \n", e.String())
  39. parseConfig()
  40. Handle()
  41. })
  42. // 监听
  43. v.WatchConfig()
  44. fmt.Println(*Conf)
  45. return nil
  46. }
  47. // LoadConfigFromYaml 装载yaml类型的配置文件
  48. func LoadConfigFromYaml(configName, configPath string) error {
  49. v = viper.New()
  50. v.SetConfigName(configName)
  51. v.AddConfigPath(configPath)
  52. //设置配置文件类型
  53. v.SetConfigType("yaml")
  54. if err := v.ReadInConfig(); err != nil {
  55. return err
  56. }
  57. return parseConfig()
  58. }
  59. // LoadConfigFromJson 装载json类型的配置文件
  60. func LoadConfigFromJson(configName, configPath string) error {
  61. v = viper.New()
  62. v.SetConfigName(configName)
  63. v.AddConfigPath(configPath)
  64. //设置配置文件类型
  65. v.SetConfigType("json")
  66. if err := v.ReadInConfig(); err != nil {
  67. return err
  68. }
  69. return parseConfig()
  70. }
  71. func parseConfig() error {
  72. c := &config.Configure{}
  73. if err := v.Unmarshal(c); err != nil {
  74. return err
  75. }
  76. // 如果全局结构体不为空则覆盖部分值
  77. if Conf == nil {
  78. Conf = c
  79. return nil
  80. }
  81. return nil
  82. }