在 Go 中,上下文攜帶與執行相關的訊息,例如截止日期和取消令牌。然而,某些場景可能需要創建一個單獨的上下文,共享相同的數據,但不受原始上下文取消的影響。
當前的任務是創建一個“克隆” Go 上下文ctx 的“(或副本),使得:
您可以使用WithoutCancel函數在任何函數或方法中建立克隆上下文:
package main 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} } func main() { ctx := context.Background() clone := WithoutCancel(ctx) // Create a goroutine using the clone context. go func() { // This goroutine will never be interrupted by cancelations on `ctx`. time.Sleep(time.Second) }() }
此解決方案提供了一種簡單的方法來創建永不取消的上下文,允許您執行比原始任務壽命較長的非同步任務情境。
以上是如何在 Go 中建立忽略取消的上下文?的詳細內容。更多資訊請關注PHP中文網其他相關文章!