config.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package config
  2. import (
  3. "flag"
  4. "fmt"
  5. "github.com/fsnotify/fsnotify"
  6. "github.com/spf13/viper"
  7. "strings"
  8. )
  9. const (
  10. DebugMode = "debug"
  11. ReleaseMode = "release"
  12. DefaultConfig = "conf/config.yaml"
  13. )
  14. type Config struct {
  15. Gorm Gorm
  16. Mysql Mysql
  17. Gin Gin
  18. Logger Logger
  19. Redis Redis
  20. Cache Cache
  21. Oss Oss
  22. Jwt Jwt
  23. Rustdesk Rustdesk
  24. }
  25. // Init 初始化配置
  26. func Init(rowVal interface{}) *viper.Viper {
  27. var config string
  28. flag.StringVar(&config, "c", "", "choose config file.")
  29. flag.Parse()
  30. if config == "" { // 优先级: 命令行 > 默认值
  31. config = DefaultConfig
  32. }
  33. v := viper.New()
  34. v.AutomaticEnv()
  35. v.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
  36. v.SetEnvPrefix("RUSTDESK_API")
  37. v.SetConfigFile(config)
  38. v.SetConfigType("yaml")
  39. err := v.ReadInConfig()
  40. if err != nil {
  41. panic(fmt.Errorf("Fatal error config file: %s \n", err))
  42. }
  43. v.WatchConfig()
  44. v.OnConfigChange(func(e fsnotify.Event) {
  45. //配置文件修改监听
  46. fmt.Println("config file changed:", e.Name)
  47. if err2 := v.Unmarshal(rowVal); err2 != nil {
  48. fmt.Println(err2)
  49. }
  50. })
  51. if err := v.Unmarshal(rowVal); err != nil {
  52. fmt.Println(err)
  53. }
  54. return v
  55. }
  56. // ReadEnv 读取环境变量
  57. func ReadEnv(rowVal interface{}) *viper.Viper {
  58. v := viper.New()
  59. v.AutomaticEnv()
  60. if err := v.Unmarshal(rowVal); err != nil {
  61. fmt.Println(err)
  62. }
  63. return v
  64. }