Go言語の関数とメソッド
Go言語において、関数 (function) と メソッド (method) の主な違いは、メソッドにはレシーバー (receiver) と呼ばれる特定の型に関連付けられた要素がある点です。以下に違いを詳しく説明します。
1. 関数
- 定義: 関数は特定の型に属さない独立したコードブロック(code block)です。
- 特徴:
- レシーバーがありません。
- 任意の引数を受け取り、値を返します。
- 例:
package main
import "fmt"
// 通常の関数
func add(a int, b int) int {
return a + b
}
func main() {
result := add(3, 5) // 関数の呼び出し
fmt.Println(result) // 出力: 8
}
この関数add
は特定の型や構造体に関連付けられていない独立した機能です。
2. メソッド
- 定義: メソッドは、特定の型(通常は構造体)に関連付けられた関数です。
- 特徴:
- レシーバー (receiver) を持ちます。
- レシーバーはメソッドがどの型に属しているかを指定します。
- 構造体やカスタム型の振る舞い(動作)を定義します。
- 例:
package main
import "fmt"
// 構造体の定義
type Person struct {
Name string
Age int
}
// 構造体に関連付けられたメソッド
func (p Person) Greet() {
fmt.Printf("Hello, my name is %s and I am %d years old.\n", p.Name, p.Age)
}
func main() {
p := Person{Name: "Alice", Age: 25}
p.Greet() // メソッドの呼び出し
}