以 web 框架为例,一个请求进来后,先到了 controller/handler,controller 要调用 service,service 要调用 dao,这种情况下,上下文信息应该如何传递呢?
比如我有一个需求,就是在 controller、service、dao 中记录日志时都记录 request_id,同一个请求的 request_id 应该是相同的。
此时一般有两种实现方式:
- Thread Local 或类似技术(隐式传递 Context)。
- 像 Golang 那样显式传递 Context。
这两种方式各有优劣:
显式大于隐式,为了后期更好维护,应该尽可能显式传递,避免隐式传递。