https://qiita.com/ryo_manba/items/c567858befd04602e3ec
goで定義した構造体の型に対してメソッドを追加するための構文がレシーバ。
// 構造体の定義
type Person struct {
Name string
Age int
}
// Person構造体にGreetというメソッドを定義する
func (p Person) Greet() {
fmt.Printf("Hello, I'm %s, %d years old.\n", p.Name, p.Age)
}
func main() {
person := Person{Name: "Taro", Age: 42}
person.Greet() // Hello I'm Taro, 42 years old.
}C#の拡張メソッドに近いが、C#の拡張メソッドは糖衣構文なのでオブジェクトを引数に取った関数呼び出しに変換されるのに対して、go言語のリフレクションは実際に型にメソッドを定義する。
static class Extensions
{
public static void Greet (this Person p)
{
Console.WriteLine(p.Name, p.Age);
}
}