package config import ( "os" "strconv" ) type Config struct { AppEnv string AppAddr string MySQLDSN string RedisAddr string RedisPassword string RedisDB int JWTSecret string Storage StorageConfig SMS SMSConfig Realname RealnameConfig Log LogConfig } type StorageConfig struct { Endpoint string Bucket string AccessKeyID string SecretAccessKey string } type SMSConfig struct { Provider string AliyunAccessKeyID string AliyunAccessKeySecret string AliyunEndpoint string AliyunSignName string AliyunLoginTemplateCode string } type RealnameConfig struct { Provider string CloudMarketURL string CloudMarketAppCode string } type LogConfig struct { Level string Dir string EnableConsole bool EnableFile bool } func Load() Config { return Config{ AppEnv: getEnv("APP_ENV", "development"), AppAddr: getEnv("APP_ADDR", ":8080"), MySQLDSN: getEnv("MYSQL_DSN", "hfb:secret@tcp(127.0.0.1:3306)/hfb_sys?charset=utf8mb4&parseTime=True&loc=Local"), RedisAddr: getEnv("REDIS_ADDR", "127.0.0.1:6379"), RedisPassword: getEnv("REDIS_PASSWORD", ""), RedisDB: getEnvInt("REDIS_DB", 0), JWTSecret: getEnv("JWT_SECRET", "change-me"), Storage: StorageConfig{ Endpoint: getEnv("STORAGE_ENDPOINT", "http://localhost:9000"), Bucket: getEnv("STORAGE_BUCKET", "hfb-sys"), AccessKeyID: getEnv("STORAGE_ACCESS_KEY_ID", "minioadmin"), SecretAccessKey: getEnv("STORAGE_SECRET_ACCESS_KEY", "minioadmin"), }, SMS: SMSConfig{ Provider: getEnv("SMS_PROVIDER", "mock"), AliyunAccessKeyID: getEnv("ALIYUN_ACCESS_KEY_ID", ""), AliyunAccessKeySecret: getEnv("ALIYUN_ACCESS_KEY_SECRET", ""), AliyunEndpoint: getEnv("ALIYUN_SMS_ENDPOINT", "dysmsapi.aliyuncs.com"), AliyunSignName: getEnv("ALIYUN_SMS_SIGN_NAME", ""), AliyunLoginTemplateCode: getEnv("ALIYUN_SMS_LOGIN_TEMPLATE_CODE", ""), }, Realname: RealnameConfig{ Provider: getEnv("REALNAME_PROVIDER", "mock"), CloudMarketURL: getEnv("REALNAME_CLOUDMARKET_URL", "https://sinocheck2.market.alicloudapi.com/fortest/ttttt"), CloudMarketAppCode: getEnv("REALNAME_CLOUDMARKET_APPCODE", ""), }, Log: LogConfig{ Level: getEnv("LOG_LEVEL", "info"), Dir: getEnv("LOG_DIR", "logs"), EnableConsole: getEnvBool("LOG_ENABLE_CONSOLE", true), EnableFile: getEnvBool("LOG_ENABLE_FILE", true), }, } } func getEnv(key, fallback string) string { value := os.Getenv(key) if value == "" { return fallback } return value } func getEnvInt(key string, fallback int) int { value := os.Getenv(key) if value == "" { return fallback } parsed, err := strconv.Atoi(value) if err != nil { return fallback } return parsed } func getEnvBool(key string, fallback bool) bool { value := os.Getenv(key) if value == "" { return fallback } parsed, err := strconv.ParseBool(value) if err != nil { return fallback } return parsed }