ホームページ >バックエンド開発 >Golang >Go のレシーバーとは何ですか?また、レシーバーはメソッド構文でどのように動作しますか?

Go のレシーバーとは何ですか?また、レシーバーはメソッド構文でどのように動作しますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-25 16:35:13111ブラウズ

What are Receivers in Go and How Do They Work with Method Syntax?

Go のメソッド構文: 関数名の前の「括弧内の内容」を理解する

Go では、次のような関数宣言に遭遇することがあります。

func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    ...
}

func (s *GracefulServer) BlockingClose() bool {
    ...
}

関数名の前の括弧内の要素は、次のように呼ばれます。 「受信機」。これらは、関数が特定の型のメソッドであることを示します。

レシーバーとは何ですか?

レシーバーは、オブジェクト指向プログラミングのクラスに似ています。これは、メソッドを呼び出すことができるタイプを表します。

最初の例では、(h handler) はメソッド ServeHTTP がハンドラー タイプのメソッドであることを意味します。同様に、(s *GracefulServer) は、BlockingClose が *GracefulServer タイプのメソッド (GracefulServer へのポインター) であることを示します。

レシーバーの仕組み

メソッドが呼び出されると、受信者は引数として呼び出しスタックにプッシュされます。レシーバーが値型の場合 (上記のハンドラーのように)、メソッド内で行われた変更は、呼び出しコンテキストに戻った後は保持されません。

値型レシーバーの状態を変更するには、次のことができます。変更された値を返すか、受信側へのポインタを使用します (*GracefulServer のように)

次のコードを考えてみましょう:

// type Person represents a person
type Person struct {
    Name string
}

// Greet returns a greeting for the person
func (p Person) Greet() string {
    return "Hello, " + p.Name
}

この例では、(p person) は Greet がメソッドであることを示しています人物タイプの。 Person インスタンスで Greet を呼び出すと、その人の名前に基づいて挨拶が返されます。

リファレンス

Go のレシーバーの詳細については、を参照してください。公式仕様: https://golang.org/ref/spec#Method_sets

以上がGo のレシーバーとは何ですか?また、レシーバーはメソッド構文でどのように動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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