MST
星途 面试题库

面试题:Go 中 context 基本数据结构演变的关键阶段有哪些

请简述 Go 语言中 context 基本数据结构从早期到现在经历了哪些关键的演变阶段,每个阶段主要解决了什么问题。
43.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

早期阶段

  • 基本情况:早期 context 相对简单,主要提供了取消操作的基础功能。
  • 解决问题:解决了在并发编程中,如何优雅地取消一组相关的 goroutine 的问题。例如,当一个外部请求取消时,所有与之相关的正在执行的 goroutine 能够收到取消信号并安全退出,避免资源泄露。

携带值传递阶段

  • 基本情况:增加了 WithValue 方法,允许在 context 中携带键值对数据。
  • 解决问题:解决了在 goroutine 调用链中传递请求范围的数据的问题。比如,在一个 HTTP 请求处理过程中,不同层次的函数调用可能需要获取一些与该请求相关的公共数据,如用户认证信息等,通过 context 传递就很方便。

截止时间与超时控制阶段

  • 基本情况:引入了 WithDeadlineWithTimeout 方法。
  • 解决问题:解决了对操作设置截止时间或超时的需求。在网络请求、数据库查询等操作中,通过设置超时时间,可避免因操作长时间未完成而导致的系统资源浪费和性能问题,提高系统的健壮性和可靠性。