sync.WaitGroup が値レシーバーで機能する理由
sync.WaitGroup 型は空のメソッド セットを提供します。つまり、メソッドがありません。その型に直接定義されます。ただし、ポインタ レシーバを備えたメソッドもあります。このため、なぜこれらのメソッドを値レシーバーで呼び出すことができるのかという疑問が生じます。
その答えは Go 言語仕様にあります。具体的には、変数がアドレス指定可能で、そのメソッド セットにポインター レシーバーを備えたメソッドが含まれている場合、構文 x.m() は (&x).m() の短縮形になります。
この例では、
var wg sync.WaitGroup wg.Add(1) wg.Done()
これは、ポインター メソッドの値レシーバーを使用する例です。コンパイラは、同等のコードを自動的に生成します:
(&wg).Add(1) (&wg).Done()
これにより、実際のメソッド実装ではポインタ レシーバが必要な場合でも、値レシーバの使用が可能になります。
以上がsync.WaitGroup のポインター メソッドで値レシーバーを使用できるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。