ホームページ >バックエンド開発 >Golang >Golang は独自のメソッドを作成します

Golang は独自のメソッドを作成します

WBOY
WBOYオリジナル
2023-05-14 21:09:36605ブラウズ

Golang は急速に成長しているプログラミング言語です。C 言語と同等の表現力と効率性を備え、さまざまなプログラミング ニーズを満たす多数の標準ライブラリとさまざまなツールも備えています。 Golang はオブジェクト指向プログラミングもサポートしており、そのメソッドは重要な機能です。この記事では、Golang でメソッドを自分で記述する方法を紹介します。

1.その方法とは何ですか?

Golang では、メソッドとは、構造体 (struct) またはインターフェイス (interface) で定義された特別なシグネチャを持つ関数です。メソッドには、値メソッドまたはポインター メソッドを指定できます。値メソッドは構造体のコピーを操作しますが、ポインター メソッドは構造体のポインターを操作します。つまり、構造体の状態はポインター メソッドで変更できることを意味します。

以下は使用例です:

package main

import "fmt"

type Rect struct {
    width, height float64
}

func (r Rect) area() float64 {
    return r.width * r.height
}

func main() {
    r := Rect{3, 4}
    fmt.Println("Area:", r.area())
}

上記のコードでは、Rect 型の構造体を作成します。次に、 area メソッドが定義され、レシーバーは Rect 型で、戻り値は float64 型の area です。 main 関数では、Rect インスタンスを作成し、area メソッドを呼び出して面積を計算し、出力します。

2. メソッドの定義

Golang では、メソッドを作成するには、最初に構造またはインターフェイスを定義する必要があります。次に、構造体またはインターフェイスにメソッドを定義します。以下は、使用法メソッドとポインター メソッドを定義する例です。

type Person struct {
    name string
    age  int
}

func (p Person) SayHello() {
    fmt.Println("Hello, my name is", p.name)
}

func (p *Person) SetAge(age int) {
    p.age = age
}

上の例では、名前と年齢の 2 つのフィールドを持つ Person 構造体を定義します。パラメーターを受け取らず、人の名前を出力するだけで値を返す SayHello メソッドを定義しました。また、SetAge メソッドも定義します。このメソッドは、整数をパラメータとして渡し、それを Person インスタンスの age プロパティとして設定します。

SayHello メソッドを呼び出すと、Person インスタンスが自動的にメソッドに渡されます。 SetAge メソッドでは、Person インスタンスの内部状態を変更するため、レシーバーとしてポインターを使用します。

3. メソッドの呼び出し

Golang では、メソッドの呼び出しにはドット (.) 演算子が必要です。次の例は、上の例で定義したメソッドを呼び出す方法を示しています。

p1 := Person{"Tom", 20}
p1.SayHello()  // Hello, my name is Tom

p2 := &Person{"Sam", 25}
p2.SetAge(30)
fmt.Println(p2.age) // 30

この例では、2 つの Person インスタンスを作成します。1 つは構造リテラルを使用し、もう 1 つは new 演算子を使用して新しいオブジェクトへのポインタを返します。割り当て Person インスタンスへのポインタ。

括弧を使用して p1.SayHello メソッドを呼び出します。この時点では、メソッドが自動的に p1 としてインスタンスを渡すため、インスタンスを渡す必要はありません。 p2.SetAge メソッドの場合、p2 ポインターを指すアドレスを渡す必要があります。そうしないと、インスタンスのプロパティにアクセスできません。

4. メソッドのオーバーロード

Golang では、メソッドをオーバーロードすることもできます。つまり、複数のメソッドを同じレシーバー タイプに定義します。以下はメソッドのオーバーロードの例です。

type Rect struct {
    width, height float64
}

func (r Rect) Area() float64 {
    return r.width * r.height
}

func (r Rect) Perimeter() float64 {
    return 2 * (r.width + r.height)
}

func main() {
    r := Rect{3, 4}
    fmt.Println("Area:", r.Area())
    fmt.Println("Perimeter:", r.Perimeter())
}

上の例では、Area と Perimeter という 2 つのメソッドを定義しました。どちらも Rect 型を操作しますが、それらのシグネチャは異なります。これら 2 つのメソッドを main 関数でそれぞれ呼び出して、長方形の面積と周囲長を計算できます。

5. 概要

このメソッドは Golang の非常に重要な機能であり、利便性を提供します。メソッドの書き方と呼び出し方は、Golang プログラマーが習得すべき基本的なスキルです。値メソッドとポインター メソッドを使用して構造体を操作したり、オーバーロード メソッドを使用して型操作を簡単に実行したりできます。もちろん、ポインターと値の転送の違いにも注意し、必要に応じてポインター メソッドを使用して構造体のプロパティを変更する必要があります。

この記事では、Golang でメソッドを記述する方法に関する基本的な知識とスキルを提供します。読者は、Golang でのメソッドの使用についてより深く理解し、習得する必要があります。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:golang言語の実装次の記事:golang言語の実装