| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- package config
- import (
- "crypto/md5"
- "encoding/hex"
- "fmt"
- "github.com/spf13/viper"
- )
- type Config struct {
- AppEnv string
- AppPort string
- FwhEnergy string
- FwhOss string
- RedisAddr string
- MySQLDSN string
- PostgresDSN string
- MongoDSN string
- MinIoEndpoint string
- MinioAccessKey string
- MinioSecretKey string
- MinioBucketName string
- }
- // 需先执行LoadConfig后才能读取ENV
- var APP_ENV string = "dev"
- var FWH_ENERGY string = "energy.fwh-toolbox.top"
- var FWH_OSS string = "energy-oss.fwh-toolbox.top"
- var FWH_USER string = ""
- var FWH_PASSWORD string = ""
- // LoadConfig 读取配置文件和环境变量
- func LoadConfig() (*Config, error) {
- v := viper.New()
- // 默认值(避免缺省时崩溃)
- v.SetDefault("APP_ENV", "dev")
- v.SetDefault("APP_PORT", "8080")
- v.SetDefault("FWH_ENERGY", "energy.fwh-toolbox.top")
- v.SetDefault("FWH_OSS", "energy-oss.fwh-toolbox.top")
- v.SetDefault("REDIS_ADDR", "localhost:6379")
- v.SetDefault("MYSQL_DSN", "")
- v.SetDefault("POSTGRES_DSN", "host=localhost user=fwh_toolbox password=fwh_toolbox dbname=fwh_toolbox_db port=5432 sslmode=disable")
- v.SetDefault("MONGO_DSN", "mongodb://localhost:27017/FwhToolboxDbDev")
- v.SetDefault("MINIO_ENDPOINT", "localhost:9198")
- v.SetDefault("MINIO_ACCESS_KEY", "fwh-toolbox")
- v.SetDefault("MINIO_SECRET_KEY", "fwh-toolbox")
- v.SetDefault("MINIO_BUCKET_NAME", "fwh-toolbox")
- // 多文件路径支持
- paths := []string{"./.env", "./config.env"}
- var readErr error
- for _, path := range paths {
- v.SetConfigFile(path)
- if err := v.ReadInConfig(); err == nil {
- fmt.Printf("✅ Using config file: %s\n", path)
- readErr = nil
- break
- } else {
- readErr = err
- }
- }
- // 环境变量覆盖文件配置
- v.AutomaticEnv()
- // 如果两个文件都没读到,也没关系,直接用默认值
- if readErr != nil {
- fmt.Println("⚠️ No config file found, using default values & environment variables")
- }
- APP_ENV = v.GetString("APP_ENV")
- FWH_ENERGY = v.GetString("FWH_ENERGY")
- FWH_OSS = v.GetString("FWH_OSS")
- FWH_USER = v.GetString("FWH_USER")
- FWH_PASSWORD = v.GetString("FWH_PASSWORD")
- h := md5.New()
- h.Write([]byte(FWH_PASSWORD))
- FWH_PASSWORD = hex.EncodeToString(h.Sum(nil))
- return &Config{
- AppEnv: v.GetString("APP_ENV"),
- AppPort: v.GetString("APP_PORT"),
- FwhEnergy: v.GetString("FWH_ENERGY"),
- FwhOss: v.GetString("FWH_OSS"),
- RedisAddr: v.GetString("REDIS_ADDR"),
- MySQLDSN: v.GetString("MYSQL_DSN"),
- PostgresDSN: v.GetString("POSTGRES_DSN"),
- MongoDSN: v.GetString("MONGO_DSN"),
- MinIoEndpoint: v.GetString("MINIO_ENDPOINT"),
- MinioAccessKey: v.GetString("MINIO_ACCESS_KEY"),
- MinioSecretKey: v.GetString("MINIO_SECRET_KEY"),
- MinioBucketName: v.GetString("MINIO_BUCKET_NAME"),
- }, nil
- }
|