sync.WaitGroup のメソッド セット
Golang の sync.WaitGroup を使用する場合、そのメソッド セットの問題に遭遇する可能性があります。
解決策
-
空のメソッド セット:
sync.WaitGroup のメソッド セットは技術的には空です。これは、そのメソッドを非ポインター値に対して直接呼び出すことができないことを意味します。
-
ポインター レシーバー:
sync.WaitGroup のすべてのメソッドにはポインター レシーバーがあり、それらは事実上メソッドの一部になります。ポインター型のセット *sync.WaitGroup.
理由
-
自動逆参照:
ポインター レシーバーの要件にもかかわらず、自動逆参照により、ポインター以外の値に対する sync.WaitGroup メソッドの呼び出しが可能です。
-
速記表記:
このような場合、コンパイラーは非ポインター値のアドレスを暗黙的に取得し、それをメソッド レシーバーとして使用します。これにより、wg.Add(1) が (&wg).Add(1) に実質的に変換されます。
Example
提供されたコード スニペットでは、wg が宣言されていますタイプ sync.WaitGroup の値として。コンパイラーが自動的に wg を逆参照し、それをポインターとして扱うため、後続のメソッド呼び出し (wg.Add、wg.Done など) が許可されます。
関連質問
さらに理解するには、次の質問を参照してください:
- ポインター レシーバーを使用したメソッドの呼び出し:それへのポインタではなくオブジェクト?
以上がsync.WaitGroup には空のメソッド セットがあるのに、そのメソッドがポインター以外の値で呼び出し可能に見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。