golang 構造メソッド

WBOY
リリース: 2023-05-14 15:20:38
オリジナル
860 人が閲覧しました

Golang は、他の言語と同様、オブジェクト指向プログラミングをサポートする、高速かつシンプルでオープンなプログラミング言語です。 Golang のオブジェクト指向プログラミングは主に構造体を通じて実装され、構造体メソッドは構造体の型に対して定義された特別な関数です。この記事では、Golang の構造メソッドに関する関連知識を紹介します。

1. ストラクチャーメソッドとは何ですか?

構造体メソッドは構造体型のメンバー関数であり、他のオブジェクト指向プログラミング言語のメンバー関数と同様に、構造体型を操作するために使用されます。通常、構造メソッドには 2 つのタイプがあり、1 つは値レシーバー、もう 1 つはポインタ レシーバーです。値レシーバーは値のコピーを操作しますが、ポインター レシーバーは元のオブジェクトを直接操作します。

2. メソッドの定義

メソッドは任意のカスタム型で定義できますが、一般的な状況は構造体型で定義することです。メソッドの定義形式は次のとおりです。

func (s 结构体类型) 方法名() 返回值类型 {
    // 方法实现代码
}
ログイン後にコピー

メソッドの定義では、関数名の前に特別なレシーバー パラメーターがあることがわかります。これは、関数の種類を示すために使用されます。メソッドが動作する構造体。レシーバパラメータは値型またはポインタ型のいずれかになります。

3. 値レシーバーとポインター レシーバー

  1. 値レシーバー

値レシーバーは、元の値の整合性を維持する必要があるメソッドで使用されます。 。 いつ。値レシーバーのメソッドでは、レシーバーの値のいずれかが変更された場合、それらの変更はメソッドのコピーでのみ発生し、元の値は変更されません。

値レシーバーは次のように定義されます。

func (s 结构体类型) 方法名() {

}
ログイン後にコピー
  1. ポインター レシーバー

ポインター レシーバーは、メソッド内のレシーバーの値を変更するのに適しています。ポインタ レシーバはレシーバにメソッドへのポインタを渡し、メソッド内でレシーバが指す元の値をメソッドが変更できるようにします。

ポインタ レシーバは次のように定義されます:

func (s *结构体类型) 方法名() {

}
ログイン後にコピー

IV. メソッド呼び出し

メソッドの呼び出し方法は、他のプログラミング言語のメンバー関数と似ています。タイプ: 一方向:

  1. Object.Method()

この方法でメソッドを呼び出すと、Golang はオブジェクトを値へのポインターに自動的に変換します。

たとえば、SayHello メソッドがレシーバーとして Person 構造型で定義されているとします。Tom という名前のオブジェクトがあり、メソッドは次のように呼び出されます:

Tom.SayHello()
ログイン後にコピー
  1. ( &Object).Method()

この方法でメソッドを呼び出すと、Golang はオブジェクトをオブジェクトへのポインターに変換し、それをメソッドに渡します。

たとえば、レシーバーとして Person 構造型を持つ SayHello メソッドを使用し、Jerry という名前のオブジェクトがある場合、メソッドを呼び出す方法は次のとおりです:

(&Jerry).SayHello()
ログイン後にコピー

5.メソッドの関数のオーバーロード

Golang では、メソッドをオーバーロードできません。つまり、構造内に、名前は同じでパラメータが異なる 2 つのメソッドを存在させることはできません。同様の機能を実装する必要がある場合は、インターフェイスの使用を検討できます。

6. 概要

この記事では主に、メソッドの定義、値レシーバーとポインタ レシーバー、メソッド呼び出し、メソッド関数のオーバーライドなど、Golang の構造メソッドに関する関連知識を紹介します。構造体メソッドは、構造体タイプに対して定義された特別な関数です。構造化手法を学び習得することで、プログラムの可読性、保守性、再利用性が向上し、プログラマの開発効率も向上します。

以上がgolang 構造メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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