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 サイトの他の関連記事を参照してください。