Go言語では、任意の型に特化した関数を定義するための仕組みであるメソッドという機能がある。
Person型の構造体を含んだ関数Greetをパッケージに組み込んでmain.goファイルで実行してみる。
まず、sample.goファイルに下記のコードを記載する。
package sample import "fmt" type Person struct { Id int Name string Reading string } func (p *Person) Greet() { fmt.Println(こんにちは") }
func (p *Person) Greet()でpをレシーバー、*をポインタ、Greetをメソッドと呼ぶ。
次にmain.goファイルに下記のコードを記載する。
package main import ( "./sample" ) func main() { var ryoko sample.Person ryoko = sample.Person{Id: 1, Name: "ryoko", Reading: "りょうこ"} ryoko.Greet() }
ryoko.Greet()はGreet関数をperson型に紐づけているので、ryoko.をGreetの前につける。Greetにはfmt.Printlnfmt.Println("こんにちは")が入っているので実行すると、下記のように表示される。
次に、「りょうこさんこんにちは」と表示したい時は、パッケージの中のコードを下記のように記載する。
package sample
import "fmt"
type Person struct {
Id int
Name string
Reading string
}
func (p *Person) Greet() {
fmt.Println(p.Name + "さん、こんにちは")
}
fmt.Println(p.Name + "さん、こんにちは")でp.Nameをつけることで、main.goファイル内で作成したPerson型のNameフィールドの値を呼び出すという意味になる。main,goファイルの中身は上記のままで実行すると下記のように表示される。