go中的接口

  对于golang的接口,纠结两天了,今天有种茅塞顿开的感受,有必要写点东西了。golang

  纠结接口,说白了就是搞不透接口,方法,结构体几者之间的关系以及具体的用途。能够简单的从三者的定义提及,接口说白了就是一个方法(method)集,结构体就是一个类,一般保存属性,方法至关于类的函数,不过有两种类型的接受者(对象),一种是值,一种是指针,指针能改变结构体中的属性值。在go中,只要结构体的方法实现(包含)了接口中全部的方法,就能够说这个结构体实现了这个接口。定义讲清楚后能够看看接口到底有什么用了,接下来给出两段代码。函数

    package main spa

    import "fmt" 指针

    type act interface {                                       //定义一个act接口,包含一个write方法
code

      write() 对象

  } 接口

  type xiaoming struct {                                    //xiaoming结构体
it

  } io

  type xiaofang struct {                                     //xiaofang结构体
class

   }

  func (xm *xiaoming) write() {                         //xiaoming结构体的方法write,接收者为指针类型。即xiaoming实现了act接口

    fmt.Println("xiaoming write")

  }

  func (xf *xiaofang) write() {                          //同上,xiaofang实现了act接口

    fmt.Println("xiaofang write")

  }

  func main() {

    var w act                                     

    xm := xiaoming{}

    xf := xiaofang{}

    w = &xm                                          //实例化接口,因为xm是指针类型的接收者,必须加&

    w.write()

    w = &xf                                           //同上

    w.write()

  }

  输出结果为:xiaoming write
        xiaofang write

  这个例子一样能说明go语言面向对象的多态性质。接口其实是做为中间体调用结构体的方法。

  第二个例子:

该接口有两个方法,Area和Perimeter,而且分别写了两个Get方法,用来分别计算面积和周长(这一步实际上是没用的)

。随后,分别定义了长方形和圆形的结构体,而且分别实现了 Shape 接口.

在 func main() {} 中,分别用了 Get 方法和调用 interface 成员方法去计算周长和面积,能够看出, 接口的做用就在于去做为"中间体"去调用结构体的成员方法

没有必要再去对接口内部的方法进行从新定义!!总之,使用接口能够很是灵活,并且与具体的实现作了解耦,若是之后有其余的实现类,只须要实现接口就能够了,而不用去改使用的时候的代码。

    

type Rect struct { width, height float64 } func (r *Rect) area() float64 { return r.width * r.height } func (r *Rect) perimeter() float64 { return (r.height + r.width) * 2 } //------------圆形------------// type Circle struct { radius float64 } func (c *Circle) area() float64 { return math.Pi * c.radius * c.radius } func (c *Circle) perimeter() float64 { return 2 * math.Pi * c.radius } 做者: 铁心木吉 连接:http://www.imooc.com/article/4579 来源:慕课网
相关文章
相关标签/搜索