更新到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)
2 回答
HUX布斯
TA贡献1876条经验 获得超6个赞
如果您没有上游上下文,请使用或作为种子,如果您有,则传递该上下文。context.Background()
context.TODO()
您可以在此处看到文档说上下文。背景()应用作初始种子。https://pkg.go.dev/context#Background
函数背景 ¶ 函数背景() 上下文背景返回一个非零的空上下文。它永远不会被取消,没有值,也没有截止日期。它通常由 main 函数、初始化和测试使用,并用作传入请求的顶级上下文。
一般来说,你不应该把零放在第一位。
大话西游666
TA贡献1817条经验 获得超14个赞
根据 Go 1.15 文档,不再允许传入零父级:
现在明确不允许使用 nil 父级创建派生上下文。任何尝试使用“使用”值“、”使用删除“或”使用取消“函数执行此操作都将导致恐慌。
为了解决这个问题,我最终使用了上下文。待办事项():
ctx := context.WithValue(context.TODO(), "some string", nil)
TODO 返回一个非零的空上下文。代码应使用上下文。TODO,当不清楚要使用哪个上下文或尚不可用时(因为周围的函数尚未扩展以接受 Context 参数)。
- 2 回答
- 0 关注
- 78 浏览
添加回答
举报
0/150
提交
取消