Goの勉強をやり始めたのでメモ。
「」を読んでる。
メソッド宣言
type Point struct{ X, Y float64 } func (p Point) Distance(q Point) float64 { // ... }
は次と一緒
<?php class Point { public float $x public float $y public function distance(self q) { //... } }
- Go では
thisやselfのような表現は使用しない。 - フィールドと同じ名前のメソッドを宣言することはできない。
ポインタレシーバを持つメソッド
- Go では引数はすべてコピーされるため、大きい引数や更新を行いたい場合はポインタを引数とする必要がある。
- 慣習的に、ひとつでもポインタレシーバを持つメソッドがあるのであれば、その型のすべてのメソッドはポインタレシーバを持つようにする。
メソッド値とメソッド式
次はメソッド値
p := Point{1, 2}
q := Point{4, 6}
distanceFromP := p.Distance
fmt.println(distanceFromP(q)) // 5
次はメソッド式
p := Point{1, 2}
q := Point{4, 6}
distance := Point.Distance
fmt.println(distance(p, q)) // 5
カプセル化
- 他の言語と違い、Goの可視性はパッケージ単位でしか行えない。
- Getter を定義する場合、慣習的に
Getプレフィックスは付けない。- Setter の場合は
Setを付ける。
- Setter の場合は