up:: Go
クラスとオブジェクトの関係性(Go 言語編) オブジェクト指向 - Qiita
Go - メソッドとレシーバ プログラミング - Qiita
goには他言語でいうクラス(データと振る舞いを一纏めにしてカプセル化するやつ)がない。
代わりに構造体(データ)とそれに付与されたメソッド(振る舞い)がある。
構造体はtype句を使って名付けする。
メソッドは関数に「どの構造体に付与するか」の情報がついたもの。
この情報はレシーバと呼ばれ、func句のすぐ後にくっつく。
package main
import (
"fmt"
)
type Square struct {
width float64
height float64
}
func (s Square) Area() float64 {
return s.width * s.height
}
func main() {
square := Square{3.0, 4.0}
fmt.Println(square.Area())
// output: 12
}
さらにレシーバにはポインタを使うことができる。ポインタレシーバ。
まず先程のレシーバは値レシーバ。コピーされるためもとの値を書き換えない。
ポインタレシーバは直接元の値を書き換える。その分コピーコストがかからず軽い。