可以复制 context.Context 变量并在 golang 中以各种方式正常运行吗?

dar*_*ing 3 go

我看到以下情况:

func foo(ctx context.Context) {
    localCtx := ctx 
    ... //do stuff
}
Run Code Online (Sandbox Code Playgroud)

这两个context.Context变量可以在所有方面互换使用吗?

查看源代码,我看到context.ContextWithCancelWithDeadlineWithTimeoutWithValue返回的返回变量是通过指向结构的指针在内部实现的,这让我认为是的,如果父上下文来自这些函数之一,它们可以互换使用。但是,emptyCtx返回的 bycontext.Background()在内部是一个 int ,所以在这里我想如果父上下文是背景上下文,它们可能无法在内部使用。

context.Context实际上是一个界面,我不确定它是否/如何改变事情。

eug*_*ioy 5

是的,您可以互换使用它们。

正如你已经注意到,该context变量返回的WithCancel,等等,其实都是指针,所以两者localCtxctx将指向同样的事情。

关于emptyCtx作为int,它不应该改变事情,因为它也被用作指针。

background您提到的变量实际上是指向 an 的指针emptyCtx,因为它是使用new关键字初始化的:

background = new(emptyCtx)
Run Code Online (Sandbox Code Playgroud)