ホームページ > バックエンド開発 > Golang > Go メソッド: レシーバーとパラメーター: 違いは何ですか?

Go メソッド: レシーバーとパラメーター: 違いは何ですか?

DDD
リリース: 2024-11-28 13:17:10
オリジナル
395 人が閲覧しました

Go Methods: Receiver vs. Parameter: What's the Difference?

Go におけるメソッド バインディング: パラメーターとレシーバーを理解する

Go では、メソッドは型と密接に関連しています。型のメソッドを定義するとき、メソッドを型に直接アタッチするか、引数として渡すかを指定できます。メソッド バインディングとして知られるこの概念は、Go のプログラミング モデルを理解する上で中心となります。

次のメソッド シグネチャを考えてみましょう。

func (p *Page) save() error {
    // ...
}
ログイン後にコピー

ここで、p は受信側であり、特別な種類のパラメータ。 Go では、レシーバーは常にメソッドの最初のパラメーターであり、メソッドがアタッチされる型を明示的に識別します。この場合、save は、Page 構造体へのポインターを表す *Page 型にアタッチされます。

受信側では、メソッドが受信側オブジェクトのインスタンス データにアクセスできるようになります。メソッドが呼び出されると、レシーバーは基になるインスタンスに自動的にバインドされます。このバインディングは呼び出し元には透過的ですが、メソッドにインスタンスのフィールドとメソッドへのアクセスを与えます。

対照的に、通常のパラメータは値として渡されます。つまり、実際のデータのコピーです。これらを使用して呼び出し元のインスタンス データにアクセスしたり、変更したりすることはできません。

レシーバーとパラメーターの区別をさらに明確にするために、次のコードを検討してください。

var p = new(Page)
p.save()
(*Page).save(p)
ログイン後にコピー

最後の 2 行はどちらも正確に表しています。同じメソッド呼び出しで、レシーバーがレシーバーの値によって表されるインスタンスにバインドされた特別な形式のパラメーターであることを示しています。

結論として、Go のレシーバーは次のようになります。メソッド シグネチャは、メソッドを、それが呼び出されるインスタンスの型にバインドする特別な種類のパラメータです。これにより、メソッドはインスタンスのデータにアクセスして操作できるようになりますが、パラメーターは値として渡され、呼び出し元のインスタンスを変更することはできません。 Go でメソッドを効果的に使用するには、この違いを理解することが不可欠です。

以上がGo メソッド: レシーバーとパラメーター: 違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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