app.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package config
  2. import (
  3. "fmt"
  4. "github.com/spf13/viper"
  5. )
  6. type App struct {
  7. Addr int `mapstructure:"addr" json:"addr" yaml:"addr"` // 端口值
  8. Mod string `mapstructure:"mod" json:"mod" yaml:"mod"` // 运行模式
  9. RouterPrefix string `mapstructure:"router-prefix" json:"router-prefix" yaml:"router-prefix"` // 路由前缀
  10. ProxyUrl string `mapstructure:"proxy-url" json:"proxy-url" yaml:"proxy-url"` // 业务默认代理地址
  11. }
  12. func AppConf() *App {
  13. if appConf == nil {
  14. appConfInit()
  15. }
  16. return appConf
  17. }
  18. var appConf *App
  19. // app配置初始化
  20. func appConfInit() {
  21. vp := viper.New()
  22. vp.SetConfigFile(ConfigAppFile) // app.json
  23. vp.SetConfigType("json")
  24. vp.SetDefault("addr", AdminHostPort)
  25. vp.SetDefault("mod", DefaultMod)
  26. vp.SetDefault("router-prefix", "admin")
  27. vp.SetDefault("proxy-url", fmt.Sprintf("http://127.0.0.1:%d", BizHostPort))
  28. handVpToFile(vp) // 文件读取 如果读取不到则生成(dev环境)
  29. if err := vp.Unmarshal(&appConf); err != nil {
  30. panic(err)
  31. }
  32. }
  33. func handVpToFile(vp *viper.Viper) {
  34. err := vp.ReadInConfig()
  35. if err != nil {
  36. if err := vp.WriteConfig(); err != nil {
  37. panic(fmt.Errorf("Fatal error config file: %s \n", err))
  38. }
  39. }
  40. }