config.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package config
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "log"
  6. "github.com/fsnotify/fsnotify"
  7. "github.com/spf13/pflag"
  8. "github.com/spf13/viper"
  9. )
  10. type Configs struct {
  11. Vber vberConfig `yaml:"vber"`
  12. Redis RedisConfig `yaml:"redis"`
  13. Mysql MysqlConfig `yaml:"mysql"`
  14. Logger LoggerConfig `yaml:"log"`
  15. }
  16. var (
  17. //获取命令行参数
  18. conf = pflag.StringP("config", "c", "", "config filepath")
  19. C *Configs
  20. )
  21. func init() {
  22. pflag.Parse()
  23. if err := initConfig(*conf); err != nil {
  24. log.Println("Config配置失败:", err.Error())
  25. panic("Config配置失败")
  26. }
  27. viper.WatchConfig()
  28. }
  29. func initConfig(name string) error {
  30. if name != "" {
  31. viper.SetConfigFile(name)
  32. } else {
  33. // 默认配置文件路径 ./config.yaml
  34. viper.AddConfigPath("./")
  35. viper.SetConfigName("config")
  36. }
  37. viper.SetConfigType("yaml")
  38. // 读取配置文件
  39. err := viper.ReadInConfig()
  40. if err != nil {
  41. panic(fmt.Errorf("Fatal error config file: %s \n", err))
  42. }
  43. if err = viper.Unmarshal(&C); err != nil {
  44. return err
  45. }
  46. // 打印下配置
  47. marshal, err := json.Marshal(C)
  48. if err == nil {
  49. fmt.Println("加载配置文件:", string(marshal))
  50. }
  51. return nil
  52. }
  53. func (c *Configs) watch() {
  54. viper.WatchConfig()
  55. viper.OnConfigChange(func(e fsnotify.Event) {
  56. fmt.Println("C file changed:", e.Name)
  57. })
  58. }