ホームページ  >  記事  >  バックエンド開発  >  非ポインター値に対して sync.WaitGroup メソッドを呼び出すことができるのはなぜですか?

非ポインター値に対して sync.WaitGroup メソッドを呼び出すことができるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-24 02:57:10545ブラウズ

Why Can sync.WaitGroup Methods Be Called on Non-Pointer Values?

sync.WaitGroup のメソッド セット

sync.WaitGroup は、ゴルーチンのコレクションが完了するのを待機できる同期プリミティブです。 。ドキュメントでは、Add、Done、および Wait メソッドにはポインター レシーバーが必要であることが示されていますが、ポインター以外の値に対しても使用できます。これはどのようにして可能ですか?

その秘密は、sync.WaitGroup の空のメソッド セットにあります。これは、sync.WaitGroup のすべてのメソッドがポインター レシーバーであることを意味します。

var wg sync.WaitGroup

など、sync.WaitGroup 型の値を作成すると、実際には sync.WaitGroup 構造体へのポインターが作成されます。このポインタは、wg 変数のメソッドを呼び出すときに自動的に逆参照されます。たとえば、次のコードは正常にコンパイルされます。

wg.Add(1)
wg.Done()
wg.Wait()

Go コンパイラーは、メソッドを呼び出す前に、wg を sync.WaitGroup へのポインターに暗黙的に変換します。この動作は Go 言語仕様で定義されています。

x がアドレス指定可能で、&x のメソッド セットに m が含まれる場合、x.m() は (&x).m() の短縮形です。

したがって、非ポインター値がアドレス指定可能な場合は、その値に対するポインター レシーバーを持つメソッドを呼び出すことができます。 Go では、ポインター以外の値は常にアドレス指定可能です。

以上が非ポインター値に対して sync.WaitGroup メソッドを呼び出すことができるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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