
084、案例四:Go 微服务的重构与错误处理统一方案从一次凌晨告警说起凌晨两点,手机震个不停。PagerDuty 弹出一条告警:用户下单接口返回了 500,但日志里只看到一行something went wrong。我打开 Grafana,发现错误率从 0.1% 飙到了 15%,持续了整整十分钟才自动恢复。排查下来,是下游库存服务超时,但我们的 API 网关直接把原始错误吞掉,抛了个毫无意义的通用异常。这种场景,在微服务架构里太常见了。每个服务各自为政地处理错误,有的返回{code: -1, msg: "fail"},有的直接 panic 让 HTTP 返回 500,有的把数据库连接失败原样暴露给前端。重构这套错误处理,成了我接手这个 Go 微服务项目后的第一个硬仗。错误处理的三个痛点先说说当时代码里最让人头疼的地方。第一个痛点是错误信息丢失。看这段代码,我当初接手时差点没骂出来:funcGetUserOrder(ctx context.Context