config.go 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package config
  2. import (
  3. "crypto/md5"
  4. "encoding/hex"
  5. "fmt"
  6. "github.com/spf13/viper"
  7. )
  8. type Config struct {
  9. AppEnv string
  10. AppPort string
  11. FwhEnergy string
  12. FwhOss string
  13. RedisAddr string
  14. MySQLDSN string
  15. PostgresDSN string
  16. MongoDSN string
  17. MinIoEndpoint string
  18. MinioAccessKey string
  19. MinioSecretKey string
  20. MinioBucketName string
  21. }
  22. // 需先执行LoadConfig后才能读取ENV
  23. var APP_ENV string = "dev"
  24. var FWH_ENERGY string = "energy.fwh-toolbox.top"
  25. var FWH_OSS string = "energy-oss.fwh-toolbox.top"
  26. var FWH_USER string = ""
  27. var FWH_PASSWORD string = ""
  28. // LoadConfig 读取配置文件和环境变量
  29. func LoadConfig() (*Config, error) {
  30. v := viper.New()
  31. // 默认值(避免缺省时崩溃)
  32. v.SetDefault("APP_ENV", "dev")
  33. v.SetDefault("APP_PORT", "8080")
  34. v.SetDefault("FWH_ENERGY", "energy.fwh-toolbox.top")
  35. v.SetDefault("FWH_OSS", "energy-oss.fwh-toolbox.top")
  36. v.SetDefault("REDIS_ADDR", "localhost:6379")
  37. v.SetDefault("MYSQL_DSN", "")
  38. v.SetDefault("POSTGRES_DSN", "host=localhost user=fwh_toolbox password=fwh_toolbox dbname=fwh_toolbox_db port=5432 sslmode=disable")
  39. v.SetDefault("MONGO_DSN", "mongodb://localhost:27017/FwhToolboxDbDev")
  40. v.SetDefault("MINIO_ENDPOINT", "localhost:9198")
  41. v.SetDefault("MINIO_ACCESS_KEY", "fwh-toolbox")
  42. v.SetDefault("MINIO_SECRET_KEY", "fwh-toolbox")
  43. v.SetDefault("MINIO_BUCKET_NAME", "fwh-toolbox")
  44. // 多文件路径支持
  45. paths := []string{"./.env", "./config.env"}
  46. var readErr error
  47. for _, path := range paths {
  48. v.SetConfigFile(path)
  49. if err := v.ReadInConfig(); err == nil {
  50. fmt.Printf("✅ Using config file: %s\n", path)
  51. readErr = nil
  52. break
  53. } else {
  54. readErr = err
  55. }
  56. }
  57. // 环境变量覆盖文件配置
  58. v.AutomaticEnv()
  59. // 如果两个文件都没读到,也没关系,直接用默认值
  60. if readErr != nil {
  61. fmt.Println("⚠️ No config file found, using default values & environment variables")
  62. }
  63. APP_ENV = v.GetString("APP_ENV")
  64. FWH_ENERGY = v.GetString("FWH_ENERGY")
  65. FWH_OSS = v.GetString("FWH_OSS")
  66. FWH_USER = v.GetString("FWH_USER")
  67. FWH_PASSWORD = v.GetString("FWH_PASSWORD")
  68. h := md5.New()
  69. h.Write([]byte(FWH_PASSWORD))
  70. FWH_PASSWORD = hex.EncodeToString(h.Sum(nil))
  71. return &Config{
  72. AppEnv: v.GetString("APP_ENV"),
  73. AppPort: v.GetString("APP_PORT"),
  74. FwhEnergy: v.GetString("FWH_ENERGY"),
  75. FwhOss: v.GetString("FWH_OSS"),
  76. RedisAddr: v.GetString("REDIS_ADDR"),
  77. MySQLDSN: v.GetString("MYSQL_DSN"),
  78. PostgresDSN: v.GetString("POSTGRES_DSN"),
  79. MongoDSN: v.GetString("MONGO_DSN"),
  80. MinIoEndpoint: v.GetString("MINIO_ENDPOINT"),
  81. MinioAccessKey: v.GetString("MINIO_ACCESS_KEY"),
  82. MinioSecretKey: v.GetString("MINIO_SECRET_KEY"),
  83. MinioBucketName: v.GetString("MINIO_BUCKET_NAME"),
  84. }, nil
  85. }