标准答案
- request.Context 在客户端断开或服务超时后可能取消,下游调用要传递它。
- 请求体必须限制大小并在处理后关闭,不能把所有数据无界读入内存。
- 响应头在第一次 Write 前确定,开始写入后再改状态码可能无效。
- Handler 返回后后台 goroutine 不能继续引用请求对象或向已关闭响应写入。
题目解析
Request context 会在客户端断开、服务超时或 handler 返回后结束,下游调用应传递它。需要继续执行的后台任务不能直接复用请求 context,应创建独立且有期限的任务状态。
请求体要限制大小并关闭,响应头在第一次 Write 前确定;写入开始后状态码和部分 headers 可能已经发送,错误只能通过协议或连接关闭表达。
Handler 启动 goroutine 要有取消、等待、结果和资源释放路径。否则请求结束后仍持有 request、Buffer、连接或向无人接收的 channel 写入。
常见误区
- 误区:把 request context 存到后台任务长期使用。改正:复制最小任务信息并创建独立 deadline。
- 误区:响应写入后继续修改状态码。改正:在首个 Write 前完成校验和 header 设置,后续错误走流协议。
- 误区:Handler 中启动 goroutine 没有退出条件。改正:绑定 context、任务状态和等待/回收路径。