猿问

错误“panic: 无法从 nil 父级创建上下文” 后更新到 Go 1.15 或更高版本

更新到Go 1.15后,我在运行代码(单元测试)时收到此错误:

恐慌:无法从 nil 父级创建上下文

Goroutine 14 [running]: testing.trunner.func1.2(0x1211480, 0x12a3dc8) /usr/local/opt/go/libexec/src/testing/testing.go:1143 +0x332 testing.trunner.func1(0xc000178900) /usr/local/opt/go/libexec/src/testing/testing.go:1146 +0x4b6 panic(0x1211480,0x12a3dc8) /usr/local/opt/go/go/libexec/src/运行时/panic.go:965 +0x1b9上下文。WithValue(0x0, 0x0, 0x1210940, 0x12a3f58, 0x187 github.com/myrepo/pkg/test.Test_failure 0x1241b80, 0xc00007c910 0x15f, 0xc000765200 0x12a3f58, 0xc00004a770
) /usr/本地/选择/go/libexec/src/上下文/上下文/上下文 go:521 +0x187

这是我的代码:

ctx := context.WithValue(nil, "some string", nil)
req := http.Request{}
req = *req.WithContext(ctx)


LEATH
浏览 79回答 2
2回答

HUX布斯

如果您没有上游上下文,请使用或作为种子,如果您有,则传递该上下文。context.Background()context.TODO()您可以在此处看到文档说上下文。背景()应用作初始种子。https://pkg.go.dev/context#Background函数背景 ¶ 函数背景() 上下文背景返回一个非零的空上下文。它永远不会被取消,没有值,也没有截止日期。它通常由 main 函数、初始化和测试使用,并用作传入请求的顶级上下文。一般来说,你不应该把零放在第一位。

大话西游666

根据 Go 1.15 文档,不再允许传入零父级:现在明确不允许使用 nil 父级创建派生上下文。任何尝试使用“使用”值“、”使用删除“或”使用取消“函数执行此操作都将导致恐慌。为了解决这个问题,我最终使用了上下文。待办事项():ctx := context.WithValue(context.TODO(), "some string", nil)TODO 返回一个非零的空上下文。代码应使用上下文。TODO,当不清楚要使用哪个上下文或尚不可用时(因为周围的函数尚未扩展以接受 Context 参数)。
随时随地看视频慕课网APP

相关分类

Go
我要回答