• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go中的接口

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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

    package main

    import "fmt"

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

      write()

  }

  type xiaoming struct {                                    //xiaoming结构体

  }

  type xiaofang struct {                                     //xiaofang结构体

   }

  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 成员方法去计算周长和面积,可以看出,接口的作用就在于去作为"中间体"去调用结构体的成员方法

没有必要再去对接口内部的方法进行重新定义!!总之,使用接口可以非常灵活,而且与具体的实现做了解耦,如果以后有其他的实现类,只需要实现接口就可以了,而不用去改使用的时候的代码。

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go语言入门:文件名、关键字与标识符发布时间:2022-07-10
下一篇:
go make切片中len() 和 cap() 的差别发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap