golang中ctx是什么-LMLPHP

本教程操作系统:Windows10系统、Go1.20.1版本、Dell G3电脑。

在 Golang 中,ctx 是 Context 的缩写,是一个标准库中的类型。

Context 类型用于在 goroutine 之间传递请求作用域特定的值、取消信号和截止时间等元数据。当创建一个请求时,可以创建一个根 Context,并将其传入整个应用程序的调用链中。随着请求的传播,这个 Context 可以被其他 goroutine 拷贝并在底层通信使用。

ctx 主要的作用有:

  • 传递元数据:在HTTP请求网络调用链中一些元数据信息(如用户授权Token)需要沿途传递和使用,ctx 是实现这种场景的首选方法。

  • 控制流超时和取消: 在多级函数嵌套调用链中,错误往往需要打穿各层调用链,在某些情况下甚至需要同时取消Goroutine,ctx 就是解决这类问题的本质方法。

下面是一个简单的示例代码,说明如何使用 ctx 控制 goroutine 的取消和超时。

func main() {
   ctx, cancel := context.WithCancel(context.Background())
   defer cancel() // 常用结合 defer 安排执行
   go doSomething(ctx)
   time.Sleep(10 * time.Second)
}
func doSomething(ctx context.Context) {
   select {
      case <-time.After(time.Hour):
         fmt.Println("do something")
      case <-ctx.Done():
         fmt.Println("canceled by user:", ctx.Err())
      }
}
登录后复制

在示例代码中,使用 `context.WithCancel` 创建了一个 Context,并携带着取消函数(`cancel()`)后传递给 `doSomething` 函数。在 `doSomething` 中,通过 `select` 来监听其中的 2 个 channel,当 10 秒过去后,主 goroutine 执行了 `cancel` 函数,从而向 `ctx` 发送一个 Done 信号,这导致 `doSomething` 的 goroutine 收到该信号并

以上就是golang中ctx是什么的详细内容,更多请关注Work网其它相关文章!

09-12 12:24