与“不要在”相关的TAG标签
GoHTTP客户端必须显式配置超时,推荐自定义http.Transport设置各阶段超时,并通过context.Context透传deadline,避免全局DefaultClient和硬编码dial选项,超时值需基于P99延迟分层设定并联动重试熔断。
Go实现API网关核心是流量控制、服务解耦与统一治理,需基于net/http+httputil.NewSingleHostReverseProxy构建基础转发,并集成鉴权、限流、熔断、日志及可观测性能力。
必须在中间件最外层用defer+recover捕获panic,记录堆栈并返回500错误;error应通过context传递由统一错误处理器响应,避免中间件直接写响应;禁用log.Fatal/os.Exit以防进程退出。
测试逻辑复用的本质是提取可组合的纯断言函数与显式状态准备,采用func(*testing.T,...any)error形式,由调用方决定错误处理方式,避免全局状态和t.Helper()误用。
必须复用HttpClient实例,推荐使用IHttpClientFactory;需配置SocketsHttpHandler的DnsRefreshTimeout、PooledConnectionLifetime等参数以优化DNS解析与连接复用,避免端口耗尽和DNS失效。
Go测试中读取配置文件应通过TestMain统一初始化,优先用环境变量传路径避免硬编码,配置文件放根目录并忽略敏感内容,禁止init加载,须校验os.ReadFile错误,动态修改需函数封装防污染。
goroutine中panic无法被外层defer捕获,必须在每个goroutine内部用deferrecover()处理;errgroup.Group可安全统一管理多goroutine错误;channel发送错误需避免关闭后发送或死锁。
WebSocket连接失败常见原因包括服务端未启动、协议/端口错误、连接被拒绝;定位需检查URL协议、服务状态、防火墙、反向代理配置,并利用ChromeNetworkWS调试帧收发。
直接读取配置文件不靠谱,因无法动态调整配置、多实例不一致且不支持灰度发布;应连接Nacos等配置中心监听变更并热更新。
统一错误处理的关键是错误类型可识别、上下文可携带、边界可拦截:应定义自定义错误类型并实现error接口和Is方法,用%w包装保留错误链,仅在HTTP/gRPC边界层转换为响应,禁止字符串匹配或降级错误类型。
