ホームページ > バックエンド開発 > Golang > golangの構造体メソッド

golangの構造体メソッド

PHPz
リリース: 2023-05-27 11:26:07
オリジナル
803 人が閲覧しました

Golang は最新の高性能プログラミング言語であり、その独自のデータ型 struct (構造体) は言語の最も重要なコンポーネントの 1 つです。それだけでなく、Golang では構造体はメソッドの定義もサポートしているため、この記事では golang の struct メソッドに焦点を当てます。

I. golang の構造とは何ですか?

Golang では、構造体は、関連するデータ フィールドのセットをカプセル化できるユーザー定義のデータ型です。構造は、データをより適切に管理および使用するために、複雑なデータ構造を記述するためによく使用されます。

Golang の構造定義には、通常、複数のフィールドが含まれます。フィールドには、基本データ型 (int、float など) または他の構造型やポインタ型を使用できます。以下は、簡単な Golang 構造定義の例です。

type Person struct {
    Name string
    Age int
    Address string
}
ログイン後にコピー

上記のコードは、Name、Age、および Address の 3 つのフィールドを含む Person 構造タイプを定義します。ここで注意すべき点は、構造体フィールドの最初の文字の大文字と小文字によって、そのフィールドが他のパッケージ (本体パッケージを含む) からアクセスできるかどうかが決定されることです。アクセス方法は次の例に示されています:

package main

import (
    "fmt"
)

type Person struct {
    Name string
    age int //小写开头
    Address string
}

func main() {
    p1 := Person{"Bob", 30, "Beijing"}
    fmt.Println(p1.Name) // Bob
    fmt.Println(p1.Address) // Beijing
    fmt.Println(p1.age) // 编译错误,age未导出
}
ログイン後にコピー

II. Golang 構造体メソッドの定義

Golang では、構造体メソッドは、構造体のフィールドおよびその他の関連データにアクセスし、メソッド内で構造体のフィールド値を変更できる関数です。メソッドの実行中にエラーが発生した場合、メソッドは値またはエラーを返すこともできます。どの構造タイプにもメソッドを含めることができ、メソッドはどのパッケージでも定義できます。

Golang でのメソッドの定義は関数と似ていますが、定義で受信者の型を指定する必要があります。レシーバーの型は、メソッドが操作する構造体オブジェクトを表す構造体型またはそのポインター型 (ここでのポインター型は C の参照型に似ています) にすることができます。メソッドの定義構文は次のとおりです。

func (t Type) MethodName(parameterlist) (returntype) {
// function body
}
ログイン後にコピー

このうち、Type は受信側の型を表し、MethodName はメソッド名、parameterlist はメソッドのパラメータ リストを定義し、returntype は戻り値の型を表します。メソッドの戻り値がない場合、この部分は省略できます。

次は、構造体のメソッドの例です:

type Rectangle struct {
     width float64
     height float64
}

func (r Rectangle) Area() float64 {
    return r.width * r.height
}
ログイン後にコピー

上記のコードは、幅と高さの 2 つのフィールドを含む Rectangle という名前の構造体タイプを定義し、Area メソッドも定義します。が作成され、四角形の面積が返されます。受信側 r は四角形そのものです。

III. golang 構造のメソッド呼び出し

メソッド呼び出し方法は通常の関数呼び出しと似ていますが、前にレシーバーオブジェクトを追加する必要がある点が異なり、Golang ではこれに対して 2 つの呼び出しメソッドが用意されています。

1 つ目は value メソッド呼び出しです。value メソッドを通じて構造体のメソッドが呼び出される場合、最初に構造体のコピーが作成され、次にそのコピーが操作されて結果が返されます。次に、値メソッド呼び出しの例を示します:

func main() {
     r := Rectangle{5, 10}
     a := r.Area() //调用值方法
     fmt.Println("area: ", a) //输出结果
}
ログイン後にコピー

出力結果は次のとおりです:

area: 50
ログイン後にコピー

2 番目は、ポインター メソッド呼び出しです。ポインターを介して呼び出されたメソッドは、ポインターの型を受け取り、元の構造に直接アクセスし、エンティティを操作するため、多くの場合、値メソッドよりも効率的です。以下はポインタ メソッド呼び出しの例です:

func (r *Rectangle) Scale(w, h float64) {
     r.width *= w
     r.height *= h
}

func main() {
     r := Rectangle{5, 10}
     r.Scale(2, 5) // 调用指针方法
     fmt.Println(r.width, r.height) // 输出结果
}
ログイン後にコピー

出力結果は次のとおりです:

10 50
ログイン後にコピー

IV. golang 構造メソッドの概要

この記事では、次について学びました。 Golang 構造の定義とメソッドの定義と呼び出し。 struct 構造型は Golang 言語の重要なコンポーネントであり、関連するデータ コレクションをカプセル化できます。同時に、メソッドによって構造の機能が拡張され、プログラマが構造内のデータをより適切に操作および管理できるようになります。最後に、メソッドはレシーバー型の値メソッドまたはポインター メソッドである可能性があるため、実際のアプリケーションでは適切な呼び出しメソッドを選択する必要があることに注意する必要があります。

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

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