Go 中的上下文管理提供了一种在应用程序的不同部分之间传递数据并处理取消的方法。然而,当您需要一个继承原始数据但不受取消影响的上下文时,就会出现挑战。
为了满足这一需求,Go 1.21 在 context 包中引入了 WithoutCancel 方法,它满足了这一要求。
或者,如果您使用的是早期版本的 Go,您可以创建自己的上下文实现,该实现是专门为防止取消而设计的。操作方法如下:
import ( "context" "time" ) type noCancel struct { ctx context.Context } func (c noCancel) Deadline() (time.Time, bool) { return time.Time{}, false } func (c noCancel) Done() <-chan struct{} { return nil } func (c noCancel) Err() error { return nil } func (c noCancel) Value(key interface{}) interface{} { return c.ctx.Value(key) } // WithoutCancel returns a context that is never canceled. func WithoutCancel(ctx context.Context) context.Context { return noCancel{ctx: ctx} }
通过此自定义上下文实现,您可以获得原始上下文的副本:
这种方法允许您在单独的 goroutine 中运行异步任务,即使父上下文终止也能确保它们的执行。
以上是如何在 Go 中创建一个不会取消的上下文?的详细内容。更多信息请关注PHP中文网其他相关文章!