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 サイトの他の関連記事を参照してください。