ホームページ >バックエンド開発 >Golang >Go の WaitGroup でポインターと変数を使用する理由

Go の WaitGroup でポインターと変数を使用する理由

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-01 00:43:10432ブラウズ

Why Use Pointers and Variables with Go's WaitGroup?

WaitGroup リファレンス: ポインターと変数の使用

Go の WaitGroup は、ゴルーチンを調整するための同期プリミティブを提供します。これには、追加、完了、待機という 3 つの主要な機能があります。ここでは、それらの使用法と、それらがポインターと変数の両方を使用して呼び出される理由を調べます。

WaitGroup メソッド

前述したように、すべての WaitGroup 関数は、 *WaitGroup レシーバー型で示される WaitGroup へのポインター。これにより、WaitGroup の内部状態を変更し、ゴルーチンの完了を追跡し、完了を待つことができます。

使用方法について

問題のコード スニペットには、両方のポインターが表示されています。および WaitGroup 関数の変数の使用法:

func main() {

    // Declared as a variable
    var wg sync.WaitGroup

    // Called with a pointer to the WaitGroup
    wg.Add(1)

    // Called with a variable (not a pointer)
    go worker(i, wg)
}

を渡すワーカーへのポインター

WaitGroup をワーカーのゴルーチンに渡すときは、& を使用してそのアドレスを渡すことが重要です。これは、ワーカーの Done 関数が WaitGroup ポインターで動作し、それを変数として直接渡すとコピーが作成され、予期しない動作が発生するためです。

結論

In要約すると、すべての WaitGroup メソッドは、ポインター レシーバーを使用して呼び出されるように設計されています。コード スニペットでは変数を使用して、宣言と関数呼び出しを簡素化します。ただし、WaitGroup をゴルーチンに渡すときは、そのアドレス (&) を渡して、すべてのメソッドが同じ基になるポインターで動作するようにすることが重要です。

以上がGo の WaitGroup でポインターと変数を使用する理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。