「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 伝播をキャンセルせずにGOでコンテキストコピーを作成する方法は?

伝播をキャンセルせずにGOでコンテキストコピーを作成する方法は?

2025-03-23に投稿されました
ブラウズ:622

How to Create a Context Copy in Go Without Cancel Propagation?

go

で伝播なしでコンテキストコピーを作成する場合、goのコンテキストを操作する場合、同じ値を含むが独立して行動する既存のコンテキストのコピーを作成する必要がある場合があります。このシナリオは、たとえば、HTTPリクエストに応答した後に非同期タスクを実行する場合に発生します。これは、元のコンテキストよりも長生きする可能性があります。ただし、よりシンプルで管理しやすいソリューションが利用可能です。この関数を使用すると、元のコンテキストからすべての値を継承するが、キャンセルの影響を受けない新しいコンテキストを作成できます。 // CANCELなしは、キャンセルされないコンテキストを返します。 func withoutcancel(ctx context.context)context.context { return Context.withValue(context.background()、context.nocancel {}、struct {} {}) }

を使用して使用するには、元のコンテキストを次のように包むだけで:

func handler(ctx context.context)(interface {}、error){ 結果:= dostuff(ctx) newContext:= context.withoutcancel(ctx) go func(){ dosomeThingelse(newContext) }() 返品結果 }

import "context"

// WithoutCancel returns a context that is never canceled.
func WithoutCancel(ctx context.Context) context.Context {
    return context.WithValue(context.Background(), context.NoCancel{}, struct{}{})
}
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3