面试题答案
一键面试早期阶段
- 基本情况:早期 context 相对简单,主要提供了取消操作的基础功能。
- 解决问题:解决了在并发编程中,如何优雅地取消一组相关的 goroutine 的问题。例如,当一个外部请求取消时,所有与之相关的正在执行的 goroutine 能够收到取消信号并安全退出,避免资源泄露。
携带值传递阶段
- 基本情况:增加了
WithValue
方法,允许在 context 中携带键值对数据。 - 解决问题:解决了在 goroutine 调用链中传递请求范围的数据的问题。比如,在一个 HTTP 请求处理过程中,不同层次的函数调用可能需要获取一些与该请求相关的公共数据,如用户认证信息等,通过 context 传递就很方便。
截止时间与超时控制阶段
- 基本情况:引入了
WithDeadline
和WithTimeout
方法。 - 解决问题:解决了对操作设置截止时间或超时的需求。在网络请求、数据库查询等操作中,通过设置超时时间,可避免因操作长时间未完成而导致的系统资源浪费和性能问题,提高系统的健壮性和可靠性。