ホームページ > バックエンド開発 > Golang > メソッドにポインタ レシーバがある場合、Go はオブジェクト レシーバを使用したメソッド呼び出しをどのように処理しますか?

メソッドにポインタ レシーバがある場合、Go はオブジェクト レシーバを使用したメソッド呼び出しをどのように処理しますか?

Mary-Kate Olsen
リリース: 2024-12-23 18:47:12
オリジナル
448 人が閲覧しました

How Does Go Handle Method Calls with Object Receivers When the Method Has a Pointer Receiver?

オブジェクト レシーバーとポインター レシーバーによるメソッド呼び出し

Go では、値レシーバー (非ポインター) またはポインターを持つ型に対してメソッドを定義できます。レシーバ(ポインタ)。オブジェクトによるポインター レシーバーを使用してメソッドを呼び出すと、Go はその呼び出しがオブジェクトへのポインターに対して行われたかのように自動的に解釈します。

たとえば、次のコードを考えてみましょう。

ここでは、値とポインターの両方の受信メソッドを持つ Vertex タイプを持っています。 main 関数では、Vertex オブジェクト v を作成し、それに対して Scale メソッドを呼び出します。通常、Scale メソッドはポインター レシーバーを想定しますが、この場合、オブジェクトを使用しています。

コンパイラーは、v がアドレス可能であり、そのメソッド セットに Scale が含まれていることを認識します。 Go の仕様によると:

「x (の型) のメソッド セットに m が含まれており、引数リストを m のパラメータ リストに割り当てることができる場合、メソッド呼び出し x.m() は有効です。x の場合はアドレス指定可能であり、&x のメソッド セットには m が含まれており、x.m() は (&x).m() の短縮形です。"

したがって、v.Scale(10) の呼び出しは次のようになります。 (&v).Scale(10) として解釈され、v オブジェクトへのポインターが Scale メソッドに効果的に渡されます。これにより、メソッドはオブジェクトの X フィールドと Y フィールドを期待どおりに変更できるようになります。

以上がメソッドにポインタ レシーバがある場合、Go はオブジェクト レシーバを使用したメソッド呼び出しをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート