Goの勉強 メソッド

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 では thisself のような表現は使用しない。
  • フィールドと同じ名前のメソッドを宣言することはできない。

ポインタレシーバを持つメソッド

  • 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 を付ける。