Golang接口的用法
我参考了这里。
假设要求解立方体和长方形的面积(体积)。
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())
}
我定义了一个区域,并计算了它们的面积(体积)。
Rectangle is {5 3}
Area is 15
Cube is {3}
Area is 27
试着更抽象地来看一下。创建一个名为Shaper的接口。
Shaper(变量).面积()
只要把变量放进去,我会给出面积的结果。
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
出了。
补充
这篇文章非常有参考价值。
Go语言中的接口实现模式
链接:http://qiita.com/tenntenn/items/eac962a49c56b2b15ee8
急忙学习Go语言#6 接口
请访问此链接以获取更多关于Go语言接口的信息:http://dev.classmethod.jp/go/golang-6/