Go言語におけるレシーバーとは、特定の型に関連付けられた関数を定義するためのメカニズムです。レシーバーを使うことで、その型に対してメソッドを追加できます。これにより、関数がその型の変数と一緒に呼び出され、直感的かつ整理された方法でデータと機能を結びつけることができます。
-
レシーバーの種類:
- 値レシーバー: 型の値を受け取ります。関数はその値のコピーを操作します。
- ポインタレシーバー: 型のポインタを受け取ります。関数はその元の値を直接操作します。
-
使い方:
- レシーバーを使って定義された関数を「メソッド」と呼びます。
- メソッドは通常の関数と同様に振る舞いますが、レシーバーに指定された型の変数と一緒に呼び出されます。
package main
import (
"fmt"
)
// 型の定義
type Rectangle struct {
Width, Height float64
}
// 値レシーバーを使ったメソッドの定義
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
// ポインタレシーバーを使ったメソッドの定義
func (r *Rectangle) Scale(factor float64) {
r.Width *= factor
r.Height *= factor
}
func main() {
r := Rectangle{Width: 3, Height: 4}
// メソッドの呼び出し
fmt.Println("Area:", r.Area()) // 値レシーバーを使用
r.Scale(2) // ポインタレシーバーを使用
fmt.Println("Scaled Area:", r.Area())
}
レシーバーとは、特定の型に関連付けられたメソッドを定義するためのGo言語の構文です。これにより、型に対して直感的に関連する機能を追加し、整理されたコードを書くことができます。値レシーバーはその型の値のコピーを操作し、ポインタレシーバーは元の値を直接操作します。