Go 语言中如何正确使用 context 控制 goroutine 超时与取消
在 Go 服务端开发里,经常遇到一个 HTTP 请求触发多个下游调用(数据库、RPC、缓存)的情况。如果某个下游迟迟不返回,goroutine 就会一直挂在那里,连接池、内存和文件描述符都会被慢慢耗尽。context 包就是为解决这类问题设计的:它让调用链上的所有 goroutine 共享同一个取消信号和截止时间。很多人第一次用 context 时会直接写 ctx, _ := context.WithTimeout(context.Background(), time.Second),然后忽略 cancel 函数,导致定时器泄漏;或者把 context 存进 struct 字段,而不是作为函数...