Go 为什么不把 Cancel 放进 Context 接口:观察权和控制权必须分开
上篇讲了 Go 为什么宁可让你多传一个 ctx 参数。
这篇往下走一步:既然 context 已经显式传进来了,为什么它自己没有 Cancel()?
这件事看起来很别扭。Context 明明能被取消,Done() 明明会关闭,Err() 明 …
上篇讲了 Go 为什么宁可让你多传一个 ctx 参数。
这篇往下走一步:既然 context 已经显式传进来了,为什么它自己没有 Cancel()?
这件事看起来很别扭。Context 明明能被取消,Done() 明明会关闭,Err() 明 …
你写一个接口,ctx 从 handler 传到 service,再传到 repo。
中间两层明明不关心超时,也不读取 trace id,却还是要把 ctx 原样递下去。
代码看起来像这样:
|
很多 Go 开发者第一次系统用 context,都会嫌它啰嗦。
一个请求从 handler 进来,service 要传 ctx,repo 要传 ctx,RPC client 要传 ctx,连中间那些根本不关心超时和取消的函数,也要机械地把 …
服务越写越多,接口越写越拧巴。
明明是 approveInvoice() 这种动作,却要硬拗成 POST /invoices/{id}/approval。
文档越来越厚,新来的同事越看越迷糊——这到底是资源操作,还是动作调用?
很多团队的 …