我看到以下情况:
func foo(ctx context.Context) {
localCtx := ctx
... //do stuff
}
Run Code Online (Sandbox Code Playgroud)
这两个context.Context变量可以在所有方面互换使用吗?
查看源代码,我看到context.Context从WithCancel、WithDeadline、WithTimeout和WithValue返回的返回变量是通过指向结构的指针在内部实现的,这让我认为是的,如果父上下文来自这些函数之一,它们可以互换使用。但是,emptyCtx返回的 bycontext.Background()在内部是一个 int ,所以在这里我想如果父上下文是背景上下文,它们可能无法在内部使用。
但context.Context实际上是一个界面,我不确定它是否/如何改变事情。
是的,您可以互换使用它们。
正如你已经注意到,该context变量返回的WithCancel,等等,其实都是指针,所以两者localCtx和ctx将指向同样的事情。
关于emptyCtx作为int,它不应该改变事情,因为它也被用作指针。
background您提到的变量实际上是指向 an 的指针emptyCtx,因为它是使用new关键字初始化的:
background = new(emptyCtx)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2668 次 |
| 最近记录: |