config.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. Lang string `mapstructure:"lang"`
  16. Gorm Gorm
  17. Mysql Mysql
  18. Gin Gin
  19. Logger Logger
  20. Redis Redis
  21. Cache Cache
  22. Oss Oss
  23. Jwt Jwt
  24. Rustdesk Rustdesk
  25. }
  26. // Init 初始化配置
  27. func Init(rowVal interface{}) *viper.Viper {
  28. var config string
  29. flag.StringVar(&config, "c", "", "choose config file.")
  30. flag.Parse()
  31. if config == "" { // 优先级: 命令行 > 默认值
  32. config = DefaultConfig
  33. }
  34. v := viper.New()
  35. v.AutomaticEnv()
  36. v.SetEnvKeyReplacer(strings.NewReplacer(".", "_", "-", "_"))
  37. v.SetEnvPrefix("RUSTDESK_API")
  38. v.SetConfigFile(config)
  39. v.SetConfigType("yaml")
  40. err := v.ReadInConfig()
  41. if err != nil {
  42. panic(fmt.Errorf("Fatal error config file: %s \n", err))
  43. }
  44. v.WatchConfig()
  45. v.OnConfigChange(func(e fsnotify.Event) {
  46. //配置文件修改监听
  47. fmt.Println("config file changed:", e.Name)
  48. if err2 := v.Unmarshal(rowVal); err2 != nil {
  49. fmt.Println(err2)
  50. }
  51. })
  52. if err := v.Unmarshal(rowVal); err != nil {
  53. fmt.Println(err)
  54. }
  55. return v
  56. }
  57. // ReadEnv 读取环境变量
  58. func ReadEnv(rowVal interface{}) *viper.Viper {
  59. v := viper.New()
  60. v.AutomaticEnv()
  61. if err := v.Unmarshal(rowVal); err != nil {
  62. fmt.Println(err)
  63. }
  64. return v
  65. }