Golang は効率的なプログラミング言語であり、その構造メソッドは Golang の特筆すべき機能の 1 つです。 Golang は構造体を使用してデータを整理し、構造体メソッドは構造体のデータを操作する関数です。この記事では、Golang の構造メソッドの概念、構文、例を紹介します。
Golang では、構造はさまざまなタイプのデータを組み合わせることができるユーザー定義のタイプを表します。構造体に含まれるデータはフィールドと呼ばれます。構造体メソッドは、構造体タイプの値のデータとフィールドを変更および操作できる構造体に関連する関数です。 Golang の Struct メソッドは、オブジェクト指向プログラミングのクラス メソッドに似ていますが、構文にいくつかの違いがあります。
以下は、名前と年齢の 2 つのフィールドを持つ person 構造体を定義し、greet() メソッドを定義する例です:
<code class="go">type person struct { name string age int } func (p person) greet() { fmt.Printf("Hello, my name is %s and I am %d years old\n", p.name, p.age) }</code>
この例では、func で始まる Golang のメソッド宣言構文が使用されています。キーワード、その後に受信者を定義するかっこ、その後にメソッド名とメソッド本体が続きます。ここで、受信者は p という名前の person 型の値です。メソッド名はgreet()で、パラメータは必要ありません。メソッド本体に挨拶が出力されます。
Golang の構造メソッド定義には 3 つの重要な部分が含まれています:
ポインタレシーバでは、メソッドレシーバは構造体型のポインタです。メソッドが受信側で呼び出されるとき、メソッドはこのポインターで実行されます。この場合、構造体の値ではなく、構造体へのポインターが使用されます。このメソッドは、構造内のデータをクエリおよび変更できます。
以下は 2 つのメソッド レシーバーの例です:
<code class="go">type person struct { name string age int } // 值接收者方法 func (p person) Greet() { fmt.Printf("Hello, my name is %s and I am %d years old\n", p.name, p.age) } // 指针接收者方法 func (p *person) SetAge(age int) { p.age = age }</code>
この例では、最初のメソッド Greet() は値レシーバーを使用し、2 番目のメソッド SetAge() はポインター レシーバーを使用します。
注: 値レシーバーまたはポインター レシーバーの使用は、実際のシナリオによって異なります。一般に、構造体の値を変更する必要がある場合は、ポインター レシーバーを使用する方が適切です。構造体の値、値レシーバーを使用するだけです。
3. Golang 構造メソッドの例
1. 値受信メソッド
<code class="go">package main import "fmt" type Rectangle struct { width, height float64 } func (r Rectangle) Area() float64 { return r.width * r.height } func (r Rectangle) Perimeter() float64 { return 2 * (r.width + r.height) } func main() { rect := Rectangle{width: 10, height: 5} fmt.Println("Area of rectangle:", rect.Area()) fmt.Println("Perimeter of rectangle:", rect.Perimeter()) }</code>
<code>Area of rectangle: 50 Perimeter of rectangle: 30</code>
この例では、幅と高さの 2 つのフィールドを持つ Rectangle 構造を定義します。次に、Area() メソッドと Perimeter() メソッドの 2 つのメソッドを実装しました。 Area() メソッドは長方形の面積を計算し、Perimeter() メソッドは長方形の周囲長を計算します。どちらのメソッドも値レシーバーを使用します。これは、四角形の値をクエリするだけで、値を変更しないためです。
2. ポインター受信メソッド
<code class="go">package main import "fmt" type Rectangle struct { width, height float64 } func (r *Rectangle) Area() float64 { return r.width * r.height } func (r *Rectangle) Perimeter() float64 { return 2 * (r.width + r.height) } func (r *Rectangle) Resize(width, height float64) { r.width += width r.height += height } func main() { rect := Rectangle{width: 10, height: 5} fmt.Println("Area of rectangle:", rect.Area()) fmt.Println("Perimeter of rectangle:", rect.Perimeter()) rect.Resize(5, 5) fmt.Println("After resizing:") fmt.Println("Area of rectangle:", rect.Area()) fmt.Println("Perimeter of rectangle:", rect.Perimeter()) }</code>
<code>Area of rectangle: 50 Perimeter of rectangle: 30 After resizing: Area of rectangle: 100 Perimeter of rectangle: 40</code>
この例では、Rectangle 構造体と 2 つのメソッド、Area() と Perimeter() も定義します。ただし、ここでは Resize() メソッドも実装します。このメソッドはポインター レシーバーを使用して Rectangle 構造体の値を変更できるようにします。 main() 関数では、Rectangle 構造体を作成し、Area() と Perimeter() を使用して長方形の面積と周囲長を計算します。次に、Resize() メソッドを使用して長方形を拡大縮小し、面積と周囲長を再度計算しました。
4. 概要
以上がgolang 構造メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。