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 の状態を変更するために BlockingClose が必要な場合、 *GracefulServer が必要です。
仕様リファレンス:
詳細については、公式 Go を参照してください。仕様: https://golang.org/ref/spec#Method_sets
以上がGo 関数宣言のレシーバーは何をしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。