ここを参考にした。
立方体と長方形の面積(体積)を求めるとする。
package main
import "fmt"
type Rectangle struct {
length, width int
}
type Cube struct {
side int
}
func (r Rectangle) Area() int {
return r.length * r.width
}
func (c Cube) Area() int {
return c.side * c.side * c.side
}
func main() {
rect := Rectangle{length: 5, width: 3}
fmt.Println("Rectangle is ", rect)
fmt.Println("Area is ", rect.Area())
cb := Cube{side: 3}
fmt.Println("Cube is ", cb)
fmt.Println("Area is ", cb.Area())
}
Areaを定義して、それぞれ面積(体積)を計算してやった。
Rectangle is {5 3}
Area is 15
Cube is {3}
Area is 27
もう少し抽象化してみる。 Shaper という interface を作ってやって
Shaper(変数).Area()
で変数を放り込めば面積が出るようにしてやる。
package main
import "fmt"
type Shaper interface {
Area() int
}
type Rectangle struct {
length, width int
}
type Cube struct {
side int
}
func (r Rectangle) Area() int {
return r.length * r.width
}
func (c Cube) Area() int {
return c.side * c.side * c.side
}
func main() {
rect := Rectangle{length: 5, width: 3}
fmt.Println("Rectangle is ", Shaper(rect))
fmt.Println("Area is ", Shaper(rect).Area())
cb := Cube{side: 3}
fmt.Println("Cube is ", Shaper(cb))
fmt.Println("Area is ", Shaper(cb).Area())
}
出た。
Rectangle is {5 3}
Area is 15
Cube is {3}
Area is 27
これでいったい何すんの?と思ったが、どうもこれで、「図形の面積(体積)をだす」という計算が抽象化出来たわけだ。
ということはfunc main()内をもっと簡略化できる。
体積(面積)を出したい図形を配列に入れてイテレーションさせてみる。
func main() {
rect := Rectangle{length: 5, width: 3}
cb := Cube{side: 3}
arr := []Shaper{rect, cb}
for _, value := range arr {
fmt.Println("Area is ", value.Area())
}
}
Area is 15
Area is 27
出た。
#追加
この記事はとても参考になる
インタフェースの実装パターン #golang
http://qiita.com/tenntenn/items/eac962a49c56b2b15ee8
急いで学ぶGo lang#6 インターフェイス
http://dev.classmethod.jp/go/golang-6/