英文:
Golang, will context.TODO ever give error
问题
ctx.Err()在ctx为context.TODO()时是否会变为非nil值?
英文:
ctx = context.TODO()
cmd := exec.CommandContext(ctx, <some_cmd>, <some_arg>)
fmt.Println(ctx.Err())
Is ctx.Err() is ever going to non-nil with ctx being context.TODO()?
答案1
得分: 2
context.TODO().Err()将始终返回nil,可以在源代码中轻松地看到:
package context
// emptyCtx表示未被取消、没有值和没有截止日期的上下文。
type emptyCtx int
func (*emptyCtx) Err() error {
return nil
}
// ...
var (
todo = new(emptyCtx)
)
// ...
// TODO返回一个非nil的空上下文。当不清楚要使用哪个上下文或者上下文尚不可用(因为周围的函数尚未扩展为接受上下文参数)时,代码应该使用context.TODO。
func TODO() Context {
return todo
}
英文:
context.TODO().Err() will always return nil, as can be easily seen in the source code:
package context
// An emptyCtx is never canceled, has no values, and has no deadline.
type emptyCtx int
func (*emptyCtx) Err() error {
return nil
}
// ...
var (
todo = new(emptyCtx)
)
// ...
// TODO returns a non-nil, empty Context. Code should use context.TODO when
// it's unclear which Context to use or it is not yet available (because the
// surrounding function has not yet been extended to accept a Context
// parameter).
func TODO() Context {
return todo
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论