Go のレシーバー: パラメーターの違いを理解する
func (p *Page) save() エラーのようなメソッド シグネチャが発生した場合、パラメータと受信者の区別について疑問に思う人もいるかもしれません。この記事では、この概念を明確にし、メソッド宣言におけるレシーバーの役割を説明します。
この例では (p *Page) で示されるレシーバーは、すべてのレシーバー メソッドが持つ必要がある一意のパラメーターです。通常のパラメータとは異なり、メソッド名の前に宣言され、メソッド呼び出しのかっこ内に明示的に含まれません。レシーバーを使用すると、メソッドがアタッチされている型に関連付けられたデータにアクセスして操作できるようになります。
質問で説明されている save() メソッドは、レシーバーとして Page 構造体へのポインターを受け取ります。これは、メソッドがレシーバーとして渡された Page の特定のインスタンス上で動作できることを意味します。対照的に、通常のパラメーターは (存在する場合) メソッドに渡され、その本体内で使用できます。
さらに区別するには、次の代替シグネチャを考慮してください。
func save(p *Page) error
これは次の結果になります。メソッドではなく関数内で。 Page インスタンスへのポインタをパラメータとして受け取り、受信側のデータやメソッドに固有のアクセス権を持たないため、動作が異なります。
受信側が本質的に糖衣構文メカニズムであることは注目に値します。メソッドを手動で呼び出すことで同じ効果を実現できます。
(*Page).save(p)
ここで、*Page は型を指し、p はレシーバーのインスタンスです。
要約すると、Go のレシーバーはは、メソッドが接続されている型のデータおよび機能にアクセスできるようにする特別なパラメーターです。レシーバーはパラメーターに似ていますが、固有のものであり、メソッド宣言で特定の目的を果たします。
以上がGo メソッドのレシーバーとパラメーターの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。