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中文網其他相關文章!