package env import ( "fmt" "log/slog" "os" "strconv" "github.com/joho/godotenv" ) var ( AppCtrlPort uint16 = 18080 AppDataPort uint16 = 18081 AppWebPort uint16 = 8848 AppLogMode = "dev" AppExitTimeout = 5 // 等待服务停止的超时时间 AppDataTimeout = 10 // 等待数据通道连接的超时时间 AppUserTimeout = 10 // 等待用户发送数据的超时时间(端口复用需要分析协议,如果用户长期不发送数据,将会阻塞分析协程) ClientId string ClientSecret string RedisHost = "localhost" RedisPort = "6379" RedisDb = 0 RedisPass = "" EndpointOnline string EndpointOffline string EndpointAssigned string ) func Init() { var err = godotenv.Load() if err != nil { slog.Debug("没有本地环境变量文件") } var value string value = os.Getenv("APP_CTRL_PORT") if value != "" { appCtrlPort, err := strconv.Atoi(value) if err != nil { panic(fmt.Sprintf("环境变量 APP_CTRL_PORT 格式错误: %v", err)) } AppCtrlPort = uint16(appCtrlPort) } value = os.Getenv("APP_DATA_PORT") if value != "" { appDataPort, err := strconv.Atoi(value) if err != nil { panic(fmt.Sprintf("环境变量 APP_DATA_PORT 格式错误: %v", err)) } AppDataPort = uint16(appDataPort) } value = os.Getenv("APP_WEB_PORT") if value != "" { appWebPort, err := strconv.Atoi(value) if err != nil { panic(fmt.Sprintf("环境变量 APP_WEB_PORT 格式错误: %v", err)) } AppWebPort = uint16(appWebPort) } value = os.Getenv("APP_LOG_MODE") if value != "" { AppLogMode = value } value = os.Getenv("APP_EXIT_TIMEOUT") if value != "" { appExitTimeout, err := strconv.Atoi(value) if err != nil { panic(fmt.Sprintf("环境变量 APP_EXIT_TIMEOUT 格式错误: %v", err)) } AppExitTimeout = appExitTimeout } value = os.Getenv("APP_DATA_TIMEOUT") if value != "" { appDataTimeout, err := strconv.Atoi(value) if err != nil { panic(fmt.Sprintf("环境变量 APP_DATA_TIMEOUT 格式错误: %v", err)) } AppDataTimeout = appDataTimeout } value = os.Getenv("CLIENT_ID") if value != "" { ClientId = value } else { panic("环境变量 CLIENT_ID 未设置") } value = os.Getenv("CLIENT_SECRET") if value != "" { ClientSecret = value } else { panic("环境变量 CLIENT_SECRET 未设置") } value = os.Getenv("REDIS_HOST") if value != "" { RedisHost = value } value = os.Getenv("REDIS_PORT") if value != "" { RedisPort = value } value = os.Getenv("REDIS_DB") if value != "" { redisDb, err := strconv.Atoi(value) if err != nil { panic(fmt.Sprintf("环境变量 REDIS_DB 格式错误: %v", err)) } RedisDb = redisDb } value = os.Getenv("REDIS_PASS") if value != "" { RedisPass = value } value = os.Getenv("ENDPOINT_ONLINE") if value != "" { EndpointOnline = value } else { panic("环境变量 ENDPOINT_ONLINE 未设置") } value = os.Getenv("ENDPOINT_OFFLINE") if value != "" { EndpointOffline = value } else { panic("环境变量 ENDPOINT_OFFLINE 未设置") } value = os.Getenv("ENDPOINT_ASSIGNED") if value != "" { EndpointAssigned = value } else { panic("环境变量 ENDPOINT_ASSIGNED 未设置") } }