为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
LEATH 2022-09-26 15:20:32
更新到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 函数、初始化和测试使用,并用作传入请求的顶级上下文。

一般来说,你不应该把零放在第一位。


查看完整回答
反对 回复 2022-09-26
?
大话西游666

TA贡献1817条经验 获得超14个赞

根据 Go 1.15 文档,不再允许传入零父级:

现在明确不允许使用 nil 父级创建派生上下文。任何尝试使用“使用”值“、”使用删除“或”使用取消“函数执行此操作都将导致恐慌。

为了解决这个问题,我最终使用了上下文。待办事项()

ctx := context.WithValue(context.TODO(), "some string", nil)

TODO 返回一个非零的空上下文。代码应使用上下文。TODO,当不清楚要使用哪个上下文或尚不可用时(因为周围的函数尚未扩展以接受 Context 参数)。


查看完整回答
反对 回复 2022-09-26
  • 2 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信