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/

广告
将在 10 秒后关闭
bannerAds