## Go で値に対してポインター レシーバー メソッドを呼び出すことができるのはなぜですか?

Patricia Arquette
リリース: 2024-10-25 18:39:17
オリジナル
566 人が閲覧しました

## Why Can I Call a Pointer Receiver Method on a Value in Go?

構文の混乱を呼び出す Go レシーバー メソッド

Go プログラミング言語には、値レシーバーとポインター レシーバーという 2 種類のレシーバー メソッドが用意されています。値レシーバーは型の値を直接操作しますが、ポインター レシーバーは型の値へのポインターを操作します。

Go のドキュメントには、値メソッドはポインターと値の両方で呼び出すことができると記載されていますが、ポインターはメソッドはポインターに対してのみ呼び出すことができます。これは、ポインター メソッドがレシーバーを変更する可能性があり、値のコピーに対してポインター メソッドを呼び出すと、それらの変更が破棄されるためです。

ただし、提供されているコード例では、値に対してポインター メソッドを正常に呼び出します。これが有効である理由を理解するには、次の言語仕様を参照する必要があります。

A method call x.m() is valid if the method set of (the type of) x
contains m and the argument list can be assigned to the parameter list
of m. If x is addressable and &x's method set contains m, x.m() is
shorthand for (&x).m().
ログイン後にコピー

これは、変数がアドレス指定可能 (つまり、参照渡しできる) であれば、変数に対してポインタ メソッドを呼び出すことができることを意味します。まるでポインターであるかのように。コード例では、変数 vAge が値として宣言されていますが、名前付き型の変数であるため、アドレス指定可能です。したがって、vAge.Set(10) の呼び出しは (&vAge).Set(10) と同等であり、&vAge は vAge.

へのポインターであるため、これは有効です。

以上が## Go で値に対してポインター レシーバー メソッドを呼び出すことができるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!