Go メソッド セット: 通常の型でポインタ型のメソッドを呼び出すことはできますか?
Go 仕様では、型のメソッド セットを次のように定義しています。レシーバーのタイプがそのタイプと一致するすべてのメソッド。ただし、ポインター型 (*T) のメソッド セットには、それ自体のメソッドと、それに対応する非ポインター型 (T) のメソッドの両方が含まれることも記載されています。ここで疑問が生じます: 通常の型に対してポインター型のメソッドを呼び出すことはできますか?
仕様の文言にもかかわらず、答えはノーです。ポインター型 (*T) で呼び出されるように設計されたメソッドを、通常の型 (T) を使用して直接呼び出すことはできません。これは、メソッド呼び出しが受信側の型と正確に一致する必要があるためです。
ただし、コンパイラは賢明な回避策を提供します。通常の型レシーバーを自動的に逆参照し、代わりにポインター型メソッドを呼び出します。これは、レシーバーを手動で参照解除し、ポインター型メソッドを明示的に呼び出すことと同じです: user.SayWat() は (&user).SayWat().
になります。以上がポインター型に設定された Go のメソッドを通常の型で呼び出すことはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。