メソ

メソッド の Go

3個の演習

メソッドについて

メソッドとは、特別な_レシーバー_引数を持つ関数です。 レシーバーは、funcキーワードとメソッド名の間に、専用の引数リストとして現れます。

func (receiver type) MethodName(parameters) (returnTypes) {

}

メソッドを定義できるのは、そのメソッドと同じパッケージで定義された型をレシーバーに持つ場合だけです。

type Person struct {
	Name string
}

func (p Person) Greetings() string {
	return fmt.Sprintf("Welcome %s!", p.Name)
}

s := Person{Name: "Bronson"}
fmt.Println(s.Greetings())
// Output: Welcome Bronson!

レシーバーには、値レシーバーとポインターレシーバーの2種類があります。

値レシーバーを持つメソッドは、渡された値のコピーに対して操作を行うため、メソッド内でレシーバーに加えた変更は呼び出し元には見えません。

レシーバーが指す値を変更するには、ポインターレシーバーを持つメソッドを宣言します。 そのような変更は、メソッドの呼び出し元にも反映されます。

type rect struct {
	width, height int
}

func (r *rect) squareIt() {
	r.height = r.width
}

r := rect{width: 10, height: 20}
fmt.Printf("Width: %d, Height: %d\n", r.width, r.height)
// Output: Width: 10, Height: 20

r.squareIt()
fmt.Printf("Width: %d, Height: %d\n", r.width, r.height)
// Output: Width: 10, Height: 10

ここにいくつかの例があります。また、メソッドについての短いチュートリアルも見てみてください。

覚えておきましょう。メソッドは、レシーバー引数を持つただの関数です。

GitHubで編集 リンクは新しいウィンドウまたはタブで開きます

メソッドを学習する

練習はロックされています

メソッドを練習するには、あと2個の演習のロックを解除してください