ホームページ >バックエンド開発 >Golang >golang の静的メソッドを深く理解する

golang の静的メソッドを深く理解する

PHPz
PHPzオリジナル
2023-04-14 13:53:421291ブラウズ

Golang はオブジェクト指向プログラミングをサポートするプログラミング言語ですが、そのオブジェクト指向プログラミング方法は従来のオブジェクト指向プログラミング言語とは多少異なります。違いの 1 つは、Golang にはクラスの概念がなく、Java には静的メソッドがないことです。しかし、Golang には静的メソッドと同様の仕組みが用意されているので、今回は Golang の静的メソッドを紹介します。

Golang にはクラスはありませんが、データを整理するための構造体 (struct) が提供されます。構造体はデータと動作をカプセル化できるデータ型であり、従来のクラスに似ています。

Golang では、構造体には独自のメソッドがあります。メソッドが呼び出されると、構造体オブジェクトのポインタがデフォルト パラメータとして渡され、メソッド内で構造体オブジェクトのフィールドとメソッドにアクセスできます。

しかし、構造に関連付けられているが、構造データにアクセスする必要がないメソッドを定義したい場合はどうすればよいでしょうか?現時点では、Golang では静的メソッドを使用する必要があります。

Golang では、静的メソッドは関数パラメーターにレシーバーを追加することによって実装されます。受信側は、関数によって操作されるデータ型を指定します。これには、構造体、ポインター、配列、スライスなどを指定できます。

次の例は、Golang で静的メソッドを定義して使用する方法を示しています。

package main

import "fmt"

type Rectangle struct {
    width, height int
}

// 定义静态方法,接收者为 Rectangle 类型
func (r Rectangle) area() int {
    return r.width * r.height
}

func main() {
    r := Rectangle{10, 20}
    fmt.Println(r.area()) // 输出200,调用静态方法
}

上の例では、構造体 Rectangle を定義し、次に静的メソッド area() を定義します。これは、Rectangle 型をレシーバーとして受け取り、r.widthr.heightCalculate を渡します。長方形の面積。

次に、main 関数で、Rectangle 型のオブジェクト r を作成し、area( ) を呼び出します。その面積を計算する方法。ここで注意する必要があるのは、従来のオブジェクト指向言語のようにクラス名を使用する代わりに、r.area() を通じて静的メソッドを直接呼び出すことができるということです。

静的メソッドは同じパッケージ内でのみ使用できることに注意することが重要です。別のパッケージで静的メソッドを使用する場合は、その最初の文字を大文字にする必要があります。

概要:

Golang にはクラスがなく、Java には静的メソッドもありませんが、静的メソッドと同様のメカニズム、つまりレシーバーが提供されます。関数パラメーターにレシーバーを追加すると、構造体に関連付けられた静的メソッドを定義できますが、構造体データにアクセスする必要はありません。 Golang の構造体には独自のメソッドがあり、静的メソッドは通常のメソッドと同じように呼び出すことができます。静的メソッドは同じパッケージ内でのみ使用できることに注意してください。

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

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