package env import ( "log/slog" "os" "strconv" "github.com/gofiber/fiber/v2/log" "github.com/joho/godotenv" ) // region app var ( AppName = "platform" AppPort string ) func loadApp() { _AppName := os.Getenv("APP_NAME") if _AppName != "" { AppName = _AppName } _AppPort := os.Getenv("APP_PORT") if _AppPort != "" { AppPort = _AppPort } else { panic("环境变量 APP_PORT 的值不能为空") } } // endregion // region db var ( DbHost = "localhost" DbPort = "5432" DbName string DbUserName string DbPassword string ) func loadDb() { _DbHost := os.Getenv("DB_HOST") if _DbHost != "" { DbHost = _DbHost } _DbPort := os.Getenv("DB_PORT") if _DbPort != "" { DbPort = _DbPort } _DbName := os.Getenv("DB_NAME") if _DbName != "" { DbName = _DbName } else { panic("环境变量 DB_NAME 的值不能为空") } _DbUserName := os.Getenv("DB_USERNAME") if _DbUserName != "" { DbUserName = _DbUserName } else { panic("环境变量 DB_USERNAME 的值不能为空") } _DbPassword := os.Getenv("DB_PASSWORD") if _DbPassword != "" { DbPassword = _DbPassword } else { panic("环境变量 DB_PASSWORD 的值不能为空") } } // endregion // region redis var ( RedisHost = "localhost" RedisPort = "6379" RedisDb = 0 RedisPass = "" ) func loadRedis() { _RedisHost := os.Getenv("REDIS_HOST") if _RedisHost != "" { RedisHost = _RedisHost } _RedisPort := os.Getenv("REDIS_PORT") if _RedisPort != "" { RedisPort = _RedisPort } _RedisDb := os.Getenv("REDIS_DB") if _RedisDb != "" { atoi, err := strconv.Atoi(_RedisDb) if err != nil { panic("环境变量 REDIS_DB 的值不是数字") } RedisDb = atoi } _RedisPass := os.Getenv("REDIS_PASS") if _RedisPass != "" { RedisPass = _RedisPass } } // endregion // region log var ( LogLevel = slog.LevelDebug ) func loadLog() { _LogLevel := os.Getenv("LOG_LEVEL") switch _LogLevel { case "debug": LogLevel = slog.LevelDebug case "info": LogLevel = slog.LevelInfo case "warn": LogLevel = slog.LevelWarn case "error": LogLevel = slog.LevelError } } // endregion // region remote var ( BaiyinAddr = "http://103.139.212.110:9989" BaiyinTokenUrl string ) var ( IdenCallbackUrl string IdenAccessKey string IdenSecretKey string ) func loadRemote() { _BaiyinAddr := os.Getenv("BAIYIN_ADDR") if _BaiyinAddr != "" { BaiyinAddr = _BaiyinAddr } _BaiyinTokenUrl := os.Getenv("BAIYIN_TOKEN_URL") if _BaiyinTokenUrl == "" { panic("环境变量 BAIYIN_TOKEN_URL 的值不能为空") } BaiyinTokenUrl = _BaiyinTokenUrl _IdenCallbackUrl := os.Getenv("IDEN_CALLBACK_URL") if _IdenCallbackUrl == "" { panic("环境变量 IDEN_CALLBACK_URL 的值不能为空") } IdenCallbackUrl = _IdenCallbackUrl _IdenAccessKey := os.Getenv("IDEN_ACCESS_KEY") if _IdenAccessKey == "" { panic("环境变量 IDEN_ACCESS_KEY 的值不能为空") } IdenAccessKey = _IdenAccessKey _IdenSecretKey := os.Getenv("IDEN_SECRET_KEY") if _IdenSecretKey == "" { panic("环境变量 IDEN_SECRET_KEY 的值不能为空") } IdenSecretKey = _IdenSecretKey } // endregion // region alipay var ( AlipayAppId string AlipayAppPrivateKey string AlipayPublicKey string AlipayApiCert string AlipayProduction = false ) func loadAlipay() { AlipayAppId = os.Getenv("ALIPAY_APP_ID") if AlipayAppId == "" { panic("环境变量 ALIPAY_APP_ID 的值不能为空") } AlipayAppPrivateKey = os.Getenv("ALIPAY_APP_PRIVATE_KEY") if AlipayAppPrivateKey == "" { panic("环境变量 ALIPAY_APP_PRIVATE_KEY 的值不能为空") } AlipayPublicKey = os.Getenv("ALIPAY_PUBLIC_KEY") if AlipayPublicKey == "" { panic("环境变量 ALIPAY_PUBLIC_KEY 的值不能为空") } AlipayApiCert = os.Getenv("ALIPAY_API_CERT") if AlipayApiCert == "" { panic("环境变量 ALIPAY_API_CERT 的值不能为空") } _AlipayProduction := os.Getenv("ALIPAY_PRODUCTION") if _AlipayProduction != "" { value, err := strconv.ParseBool(_AlipayProduction) if err != nil { panic("环境变量 ALIPAY_PRODUCTION 的值不是布尔值") } AlipayProduction = value } } // endregion // region wechatpay var ( WechatPayAppId string WechatPayMchId string WechatPayMchPrivateKeySerial string WechatPayMchPrivateKeyPath string WechatPayPublicKeyId string WechatPayPublicKeyPath string WechatPayApiCert string WechatPayCallbackUrl string WechatPayProduction = false ) func loadWechatPay() { WechatPayAppId = os.Getenv("WECHATPAY_APP_ID") if WechatPayAppId == "" { panic("环境变量 WECHATPAY_APP_ID 的值不能为空") } WechatPayMchId = os.Getenv("WECHATPAY_MCH_ID") if WechatPayMchId == "" { panic("环境变量 WECHATPAY_MCH_ID 的值不能为空") } WechatPayMchPrivateKeySerial = os.Getenv("WECHATPAY_MCH_PRIVATE_KEY_SERIAL") if WechatPayMchPrivateKeySerial == "" { panic("环境变量 WECHATPAY_MCH_PRIVATE_KEY_SERIAL 的值不能为空") } WechatPayMchPrivateKeyPath = os.Getenv("WECHATPAY_MCH_PRIVATE_KEY_PATH") if WechatPayMchPrivateKeyPath == "" { panic("环境变量 WECHATPAY_MCH_PRIVATE_KEY_PATH 的值不能为空") } WechatPayPublicKeyId = os.Getenv("WECHATPAY_PUBLIC_KEY_ID") if WechatPayPublicKeyId == "" { panic("环境变量 WECHATPAY_PUBLIC_KEY_ID 的值不能为空") } WechatPayPublicKeyPath = os.Getenv("WECHATPAY_PUBLIC_KEY_PATH") if WechatPayPublicKeyPath == "" { panic("环境变量 WECHATPAY_PUBLIC_KEY_PATH 的值不能为空") } WechatPayApiCert = os.Getenv("WECHATPAY_API_CERT") if WechatPayApiCert == "" { panic("环境变量 WECHATPAY_API_CERT 的值不能为空") } WechatPayCallbackUrl = os.Getenv("WECHATPAY_CALLBACK_URL") if WechatPayCallbackUrl == "" { panic("环境变量 WECHATPAY_CALLBACK_URL 的值不能为空") } _WechatPayProduction := os.Getenv("WECHATPAY_PRODUCTION") if _WechatPayProduction != "" { value, err := strconv.ParseBool(_WechatPayProduction) if err != nil { panic("环境变量 WECHATPAY_PRODUCTION 的值不是布尔值") } WechatPayProduction = value } } // endregion // region debug var ( // DebugHttpDump 是否打印请求和响应的原始数据 DebugHttpDump = false // DebugExternalChange 是否实际执行非幂等外部接口的调用。 // 例如外部数据修改接口,在内部接口调试时可以关闭,避免对外部数据产生影响 DebugExternalChange = true ) func loadDebug() { debugHttpDump := os.Getenv("DEBUG_HTTP_DUMP") if debugHttpDump != "" { value, err := strconv.ParseBool(debugHttpDump) if err != nil { panic("环境变量 DEBUG_HTTP_DUMP 的值不是布尔值") } DebugHttpDump = value } debugExternalChange := os.Getenv("DEBUG_EXTERNAL_CHANGE") if debugExternalChange != "" { value, err := strconv.ParseBool(debugExternalChange) if err != nil { panic("环境变量 DEBUG_EXTERNAL_CHANGE 的值不是布尔值") } DebugExternalChange = value } } // endregion func Init() { err := godotenv.Load() if err != nil { log.Debug("❓ 没有本地环境变量") } else { log.Debug("✔ 加载本地环境变量") } loadApp() loadDb() loadRedis() loadLog() loadDebug() loadRemote() loadAlipay() // loadWechatPay() }