Goの勉強をやり始めたのでメモ。
「プログラミング言語 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 の場合は