更新到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 關注
- 103 瀏覽
添加回答
舉報
0/150
提交
取消