ホームページ  >  記事  >  バックエンド開発  >  ポインター型に設定された Go のメソッドを通常の型で呼び出すことはできますか?

ポインター型に設定された Go のメソッドを通常の型で呼び出すことはできますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-17 20:37:01574ブラウズ

Can Go's Method Set on Pointer Types Be Called with Regular Types?

Go メソッド セット: 通常の型でポインタ型のメソッドを呼び出すことはできますか?

Go 仕様では、型のメソッド セットを次のように定義しています。レシーバーのタイプがそのタイプと一致するすべてのメソッド。ただし、ポインター型 (*T) のメソッド セットには、それ自体のメソッドと、それに対応する非ポインター型 (T) のメソッドの両方が含まれることも記載されています。ここで疑問が生じます: 通常の型に対してポインター型のメソッドを呼び出すことはできますか?

仕様の文言にもかかわらず、答えはノーです。ポインター型 (*T) で呼び出されるように設計されたメソッドを、通常の型 (T) を使用して直接呼び出すことはできません。これは、メソッド呼び出しが受信側の型と正確に一致する必要があるためです。

ただし、コンパイラは賢明な回避策を提供します。通常の型レシーバーを自動的に逆参照し、代わりにポインター型メソッドを呼び出します。これは、レシーバーを手動で参照解除し、ポインター型メソッドを明示的に呼び出すことと同じです: user.SayWat() は (&user).SayWat().

になります。

以上がポインター型に設定された Go のメソッドを通常の型で呼び出すことはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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