MST

星途 面试题库

面试题:Go 中 context 传递数据的常见场景及基础优化策略

在 Go 语言中,简述 context 传递数据的常见使用场景有哪些?针对这些场景,说出至少两种基础的优化策略,并简要说明原理。
49.6万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

常见使用场景

  1. 控制子 goroutine 的生命周期:例如在一个 HTTP 处理函数中启动多个 goroutine 进行数据查询等操作,当 HTTP 请求结束时,通过 context 可以通知这些子 goroutine 结束,避免资源泄露。
  2. 传递截止时间:在执行一些有时间限制的任务时,将截止时间通过 context 传递给子 goroutine,当超过截止时间时,子 goroutine 可以优雅退出。
  3. 传递请求范围的数据:如在一个 HTTP 请求处理的多个函数调用链中传递用户认证信息等,避免在每个函数参数中都显示传递。

优化策略

  1. 复用 context
    • 原理:如果在一个调用链中有多个函数需要相同的 context 信息,避免每次都创建新的 context,而是复用已有的 context。这样可以减少内存分配和创建开销。例如在一个 HTTP 中间件链中,顶层创建的 context 可以一直传递下去,不需要每层中间件都创建新的 context。
  2. 避免不必要的 context 嵌套
    • 原理:过多的 context 嵌套会增加复杂性和资源开销。如果某些操作并不需要特定的 context 功能(如取消或截止时间),可以直接使用父级 context,而不是创建新的嵌套 context。这样可以减少内存占用和管理成本,使代码逻辑更清晰。