ホームページ > バックエンド開発 > Golang > Go 関数宣言のかっこはメソッドとレシーバーをどのように定義しますか?

Go 関数宣言のかっこはメソッドとレシーバーをどのように定義しますか?

Barbara Streisand
リリース: 2024-12-31 04:23:09
オリジナル
215 人が閲覧しました

How Do Parentheses in Go Function Declarations Define Methods and Receivers?

Go の括弧で囲まれた構文を使用した関数宣言を理解する

Go では、関数宣言に関数名の前に括弧を含めることができます。これらのかっこは、メソッド定義で重要な役割を果たすレシーバーを囲みます。

レシーバーは、メソッドが動作するオブジェクトです。次の例を考えてみましょう。

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

func (s *GracefulServer) BlockingClose() bool {
    ...
}
ログイン後にコピー

最初の例では、受信側は (h ハンドラー) です。これは、ServeHTTP メソッドがハンドラー値タイプに属していることを示します。レシーバーを囲む括弧は、メソッドを定義するための必須の構文であり、通常の関数と区別されます。

2 番目の例では、レシーバーは (s *GracefulServer) です。ここで、BlockingClose メソッドは *GracefulServer ポインター タイプに属します。アスタリスク * はポインターを表し、メソッドが GracefulServer オブジェクトへのポインターで動作することを示します。

レシーバーは、他のオブジェクト指向言語の this キーワードのように動作します。これにより、メソッドがレシーバーのプロパティにアクセスして変更し、それが属するオブジェクトの状態を効果的に変更できるようになります。

メソッドを呼び出すと、レシーバーは他の引数と同様に呼び出しスタックにプッシュされます。レシーバーが値型の場合 (ハンドラーの場合など)、メソッド内で行われた変更は、関数呼び出しが返された後は保持されません。このような場合、永続的な変更を保証するには、ポインター レシーバーを使用するか、変更された値を返すことが重要です。

詳細については、メソッド セットに関する Go 言語仕様のセクションを参照してください: https://golang.org/ ref/spec#Method_sets

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート