| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package config
- import (
- "fmt"
- "github.com/spf13/viper"
- )
- type Config struct {
- AppEnv string
- AppPort string
- RedisAddr string
- MySQLDSN string
- PostgresDSN string
- MongoDSN string
- }
- // 需先执行LoadConfig后才能读取APP_ENV
- var APP_ENV string
- // LoadConfig 读取配置文件和环境变量
- func LoadConfig() (*Config, error) {
- v := viper.New()
- // 默认值(避免缺省时崩溃)
- v.SetDefault("APP_ENV", "dev")
- v.SetDefault("APP_PORT", "8080")
- 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")
- // 多文件路径支持
- 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")
- return &Config{
- AppEnv: v.GetString("APP_ENV"),
- AppPort: v.GetString("APP_PORT"),
- RedisAddr: v.GetString("REDIS_ADDR"),
- MySQLDSN: v.GetString("MYSQL_DSN"),
- PostgresDSN: v.GetString("POSTGRES_DSN"),
- MongoDSN: v.GetString("MONGO_DSN"),
- }, nil
- }
|