関数とメソッドは、Go 言語における 2 つの異なる概念です。レシーバー: 関数にはレシーバーがありませんが、メソッドにはレシーバーがあります。呼び出し可能性: 関数は型名によってのみ呼び出すことができますが、メソッドは型または変数名によって呼び出すことができます。アクセス制御: 関数はパラメーターとグローバル変数にのみアクセスできますが、メソッドは受信側のプライベート フィールドにアクセスできます。
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 是值类型)
関数とメソッドは、Go 言語では異なる概念です。など、さまざまな目的に使用されます。 Go 言語を効果的に使用するには、それらの違いを理解することが重要です。関数は独立したタスクに使用され、メソッドは特定のタイプに関連付けられたタスクに使用されます。これらの違いを理解することで、より明確で、保守しやすく、スケーラブルな Go コードを作成できます。
以上がgolang の関数とメソッドの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。