厚土Go学习笔记

共2981字,阅读需7分钟

在go语言中,接口类型是由一组方法定义的集合。

一个类型是否实现了一个接口,就看这个类型是否实现了接口中定义的所有方法。在go语言中,无需特别的指明?

定义一个接口

定义一个结构体

定义两个方法,一个是结构体指针,一个是结构体。

声明一个接口变量

结构体也实例化一下

指针也是 Vertex 结构体的指针,所以可以用 f 来实例化。

下面你可以分别看一下 a 和 f 都能实现什么方法了。

仔细测试,你会发现 是会报错的。是的,a 没有 Scale() 这个方法。

为什么呢?因为 里的是 Vertex 而不是 *Vertex 。

如果你加上 符号,那么,a.Scale() 就可以实现了。

完整例子

运行结果

结合上边的例子,我们可以发现,类型通过实现方法来实现接口,却不必要显示的声明。所以没有关键字 implements 。这是隐式接口。

隐式接口解耦了实现接口的包和定义接口的包,实现包和定义包“互不依赖”。

Stringers一个普遍存在的接口,在 fmt 中定义。

我们给它在包内依附一个结构体,定义一个 String() 方法。

为了区别原始的值,我们在 Strings() 内的返回值前加了一个字符串 Joel ,以作区别。

看完整代码

运行结果如下

接口和结构体都可以使用 String() 函数方法。

你可是试着把 String() 方法里的返回值写成

运行自己看看结果有无不同。

再写一个例子,这次结构体多加一个字段,看看如何应用。

运行结果

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171225B0ZJDD00?refer=cp_1026

扫码关注云+社区