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ファイルの中身は上記のままで実行すると下記のように表示される。