package config import ( "os" "strconv" "time" ) type Config struct { ListenAddr string PublicBaseURL string MySQLDSN string RedisAddr string RedisPassword string RedisDB int AutoMigrate bool JavaAuthBaseURL string JavaDeviceBaseURL string JavaAppBaseURL string JavaBridgeBaseURL string JavaOtherBaseURL string JavaWalletBaseURL string BaishunPlatformBaseURL string BaishunAppID int64 BaishunAppChannel string BaishunAppKey string BaishunGSP int BaishunLaunchCodeTTLSeconds int BaishunSSTokenTTLSeconds int InternalCallbackSecret string Timeout time.Duration } func Load() Config { return Config{ ListenAddr: getEnv("INVITE_HTTP_ADDR", ":2900"), PublicBaseURL: getEnv("INVITE_PUBLIC_BASE_URL", "http://localhost:2900"), MySQLDSN: getEnv("INVITE_MYSQL_DSN", "root:root@tcp(127.0.0.1:3306)/chatapp3?charset=utf8mb4&parseTime=True&loc=Local"), RedisAddr: getEnv("INVITE_REDIS_ADDR", "127.0.0.1:6379"), RedisPassword: getEnv("INVITE_REDIS_PASSWORD", ""), RedisDB: getEnvInt("INVITE_REDIS_DB", 0), AutoMigrate: getEnvBool("INVITE_AUTO_MIGRATE", false), JavaAuthBaseURL: getEnv("INVITE_JAVA_AUTH_BASE_URL", "http://127.0.0.1:2100"), JavaDeviceBaseURL: getEnv("INVITE_JAVA_DEVICE_BASE_URL", "http://127.0.0.1:2400"), JavaAppBaseURL: getEnv("INVITE_JAVA_APP_BASE_URL", "http://127.0.0.1:2400"), JavaBridgeBaseURL: getEnv("INVITE_JAVA_BRIDGE_BASE_URL", "http://127.0.0.1:2200"), JavaOtherBaseURL: getEnv("GAME_JAVA_OTHER_BASE_URL", getEnv("INVITE_JAVA_APP_BASE_URL", "http://127.0.0.1:2400")), JavaWalletBaseURL: getEnv("GAME_JAVA_WALLET_BASE_URL", "http://127.0.0.1:2300"), BaishunPlatformBaseURL: getEnv("BAISHUN_PLATFORM_BASE_URL", ""), BaishunAppID: getEnvInt64("BAISHUN_APP_ID", 0), BaishunAppChannel: getEnv("BAISHUN_APP_CHANNEL", ""), BaishunAppKey: getEnv("BAISHUN_APP_KEY", ""), BaishunGSP: getEnvInt("BAISHUN_GSP", 101), BaishunLaunchCodeTTLSeconds: getEnvInt("BAISHUN_LAUNCH_CODE_TTL_SECONDS", 300), BaishunSSTokenTTLSeconds: getEnvInt("BAISHUN_SS_TOKEN_TTL_SECONDS", 86400), InternalCallbackSecret: getEnv("GAME_INTERNAL_CALLBACK_SECRET", ""), Timeout: time.Duration(getEnvInt("INVITE_HTTP_TIMEOUT_SECONDS", 8)) * time.Second, } } func getEnv(key, fallback string) string { if value := os.Getenv(key); value != "" { return value } return fallback } 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 getEnvInt64(key string, fallback int64) int64 { value := os.Getenv(key) if value == "" { return fallback } parsed, err := strconv.ParseInt(value, 10, 64) 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 }