ホームページ  >  記事  >  バックエンド開発  >  golang の関数とメソッドの違いは何ですか?

golang の関数とメソッドの違いは何ですか?

王林
王林オリジナル
2024-04-25 17:54:02477ブラウズ

関数とメソッドは、Go 言語における 2 つの異なる概念です。レシーバー: 関数にはレシーバーがありませんが、メソッドにはレシーバーがあります。呼び出し可能性: 関数は型名によってのみ呼び出すことができますが、メソッドは型または変数名によって呼び出すことができます。アクセス制御: 関数はパラメーターとグローバル変数にのみアクセスできますが、メソッドは受信側のプライベート フィールドにアクセスできます。

golang 函数和方法有什么不同?

Go 言語の関数とメソッド: 違いの詳細な説明

Go 言語では、関数とメソッドはそれぞれ異なる目的シーンに応じた 2 つの異なる概念です。使用されること。この記事では、それらの主な違いを詳しく説明し、実際の例を示して説明します。

関数

関数は、特定のタスクを実行する独立したコード ブロックです。これらはキーワード func で宣言され、その後に関数名、パラメーター リスト、戻り値の型が続きます。

func sum(a, b int) int {
    return a + b
}

メソッド

メソッドは、特定の型に関連付けられた関数です。これらは、受信側パラメータを受信側タイプの前に配置することによって定義されます。レシーバパラメータは、ポインタ (*T) または値 (T) にすることができます。

type Point struct {
    x, y int
}

func (p *Point) Scale(factor int) {
    p.x *= factor
    p.y *= factor
}

違い

関数とメソッドの主な違いは次のとおりです:

  • レシーバー: 関数にはレシーバーがありませんが、メソッドにはレシーバーがあります。 。
  • 呼び出し可能性: メソッドは型名または変数名で呼び出すことができますが、関数は型名でのみ呼び出すことができます。
  • アクセス制御: メソッドはレシーバーの型のフィールドとメソッドを介してレシーバーのプライベート フィールドにアクセスできますが、関数はそのパラメーターとグローバル変数にのみアクセスできます。

実際的なケース

単純なシェイプ インターフェイスと Rectangle を検討します。次のように入力します。

type Shape interface {
    Area() float64
}

type Rectangle struct {
    width, height float64
}

func (r Rectangle) Area() float64 {
    return r.width * r.height
}

このコードでは、 Shape は、Area メソッドを定義するインターフェイスです。 Rectangle は、Shape インターフェイスを実装し、Area メソッドの特定の実装を提供する構造体です。

関数 PrintArea を使用すると、任意の Shape 型を受け入れ、その領域を印刷できます:

func PrintArea(s Shape) {
    fmt.Printf("Area: %.2f\n", s.Area())
}

を呼び出すことで、 Rectangle インスタンス Area メソッドを使用すると、長方形の面積を計算して出力できます。

rect := Rectangle{width: 5, height: 10}
PrintArea(&rect) // 使用指针调用方法(因为 Rectangle 是值类型)

summary

関数とメソッドは、Go 言語では異なる概念です。など、さまざまな目的に使用されます。 Go 言語を効果的に使用するには、それらの違いを理解することが重要です。関数は独立したタスクに使用され、メソッドは特定のタイプに関連付けられたタスクに使用されます。これらの違いを理解することで、より明確で、保守しやすく、スケーラブルな Go コードを作成できます。

以上がgolang の関数とメソッドの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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