golangメソッドセット

WBOY
リリース: 2023-05-09 21:32:06
オリジナル
634 人が閲覧しました

Golang は、オブジェクトを操作するための豊富なメソッド セットを提供する、シンプルで強力なプログラミング言語です。メソッド セットは、特定の型の値に対して呼び出すことができるメソッドのコレクションです。

Golang のメソッド セットは次の型で構成されます。

  1. 値型メソッド セット

値型メソッド セットは、この型に属するすべての値を表します。メソッドのコレクション。値の型には、基本型 (int、float、string など) とカスタム型 (struct、array、slice、map など) が含まれます。構造体を例にとると、構造体のすべてのフィールドが値型メソッド セットに含まれます。メソッドが構造体で呼び出されると、この値のコピーが作成され、操作されます。

次は例です。

type Person struct {
    Name string
    Age int
}

func (p Person) SayHello() {
    fmt.Println("Hello, my name is", p.Name, "and I am", p.Age, "years old.")
}

func main() {
    p := Person{Name: "John", Age: 30}
    p.SayHello() // 输出:Hello, my name is John and I am 30 years old.
}
ログイン後にコピー
  1. ポインタ型メソッド セット

ポインタ型メソッド セットは、このタイプのメソッドに属するすべてのメソッドのコレクションを表します。ポインタ。値型とは異なり、ポインター型にはポインター レシーバーを持つすべてのメソッドが含まれます。ポインタ型メソッドセットの機能は、元のオブジェクトを操作することです。

以下は例です。

type Rect struct {
    Width int
    Height int
}

func (r *Rect) Area() int {
    return r.Width * r.Height
}

func main() {
    r := &Rect{Width: 10, Height: 5}
    fmt.Println(r.Area()) // 输出:50
}
ログイン後にコピー
  1. 値型とポインタ型のメソッド セットの組み合わせ

型に値型のメソッド セットが両方ある場合とポインタ型のメソッド セットの 2 つの異なるメソッド セットがあります。このタイプは、レシーバータイプと呼ばれることがよくあります。この型は値とポインターの両方のレシーバーをサポートしているため、値またはポインターのどちらでも呼び出すことができます。

以下は例です。

type Counter struct {
    Value int
}

func (c Counter) Increment() {
    c.Value++
}

func (c *Counter) Decrement() {
    c.Value--
}

func main() {
    c1 := Counter{Value: 0}
    c1.Increment()
    fmt.Println(c1.Value) // 输出:0

    c2 := &Counter{Value: 0}
    c2.Decrement()
    fmt.Println(c2.Value) // 输出:-1
}
ログイン後にコピー

上の例では、値型レシーバーを介してインクリメント メソッドを追加し、ポインタ型レシーバーを介してデクリメント メソッドを追加できます。値に対して increment メソッドを呼び出すと、元の変数ではなく、変数のコピーのみが変更されます。デクリメント メソッドがポインターに対して呼び出されると、元の変数が変更されます。

一般に、Golang のメソッド セットは、オブジェクトを処理するためのシンプルかつ強力な方法を提供します。これにより、オブジェクトに対する操作の実行がより簡単かつ直感的になり、コードの重複が効果的に回避されます。初心者にとって、メソッド セットの背後にある考え方を理解することは非常に重要であり、これは Golang プログラミング言語の基本原理をより深く理解するのに役立ちます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!