ホームページ >バックエンド開発 >Golang >Go 関数宣言のレシーバーは何をしますか?

Go 関数宣言のレシーバーは何をしますか?

DDD
DDDオリジナル
2024-12-20 10:55:21199ブラウズ

What Does the Receiver in Go Function Declarations Do?

Go 関数宣言の括弧の中は何ですか?

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

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

括弧内は次のようになります。 (h ハンドラー) と (s *GracefulServer) は、「レシーバー」として知られています。 Go での動作方法は他の言語とは異なります。

クラスとしてのレシーバー

レシーバーの型は、オブジェクト指向プログラミングのクラスと同様に、エンティティを表します。どのメソッドが呼び出されるか。たとえば、A がクラス Person 内のメソッドの場合、A を呼び出すには Person のインスタンスが必要です。

Receiver as Value or Pointer

上記の例では、 h は値型であり、s はポインタです。この区別は、メソッドの動作方法に影響します。

  • 値の型 (ハンドラーなど): メソッド内のレシーバーへの変更は、元のインスタンスには影響しません。
  • ポインター タイプ (例: *GracefulServer): 受信側に加えられた変更は、元のインスタンス。

ポインタを使用する場合

レシーバの状態を変更する場合は、レシーバとしてポインタを使用します。たとえば、GracefulServer の状態を変更するために BlockingClose が必要な場合、 *GracefulServer が必要です。

仕様リファレンス:

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

以上がGo 関数宣言のレシーバーは何をしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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