golang の struct と method
はじめに
しばらくgoを書いていなかったので復習がてらgoの構造体の扱いをまとめます。
構造体にメソッドを生やす
データ構造に対して振る舞いを指定します。
今回は三角形の面積を求めるtriangle
パッケージを作りました。
./triangle/triangle.go
package triangle // 各フィールドを小文字で始めることでprivateな構造体 type Triangle struct { name string bottom int height int } // いわゆるコンストラクタ。このパッケージを利用する関数内でNewする。 func New(name string, bottom, height int) *Triangle { return &Triangle{name: name, bottom: bottom, height: height} } // nameを返すメソッド。~.name のようにはアクセスできない(させない)のでこのメソッドを呼び出す。 func (t Triangle) Name() string { return t.name } // 面積を返すメソッド。 func (t Triangle) Area() int { return t.bottom * t.height / 2 } // 参照渡し func (t *Triangle) Scale(i int) { t.bottom = t.bottom * i t.height = t.height * i }
これをimportしてmain関数で利用します。
./main.go
package main import ( "fmt" "~/triangle" ) func main() { t := triangle.New("triangle01", 3, 5) t.Scale(2) fmt.Println(t.Name(), "Area is ", t.Area()) // out is: triangle01 Area is 30 }
まとめ
やはりgoの構造体の取り回しは書いていて気持ちが良いですね。