interfacce 翻译过来即是接口,这是种非常抽象的定义,即鸭子类型。(当一只鸟,会鸭子一样叫,会鸭子一样走路,会鸭子一样飞,我们就把它称作为鸭子)
interface
示例如下
1 | func (h human) sayHi(){ |
这时候我们定义好了一个 men
的接口,并把sayhi()
方法添加进了该接口。接下来我们看看这个是怎么使用的。
1 | func main(){ |
输出如下
1 | Hi I am jack |
可以发现,我们定义好了一个 men
接口 ,并用 teacher
方法实现了接口的调用。注意,此时 teacher
和human
的除sayHi()
以外的方法都不能在 men
中调用,虽然这句有点废话,但是如果注意到这一点,也就知道 interface
这一定义的一大用处了。
go 的 public 和 private 实现并没有关键字,要靠定义方法的大小写来判断,如果我们的men
接口是要对外开放的,我们就要把 men
改成 Men
。
interface
还有一个有趣的用法,即空接口,当一个接口为空的时候,即 interface{}
, 把该接口作为参数传入func
,也就可以接受任何类型的值,当func
返回值设置为interface{}
时,即可代表可返回任何类型的值,非常实用。
fmt.Println
是我们常用的打印函数,当你打开他的源码定义是,即可看到
1 | type Stringer interface { |
即任何 String 方法都能被作为参数被 fmt.Println
调用。
我们为 human
添加定义
1 | func (h human) String() string{ |
然后调用
1 | func main(){ |
输出结果应该猜到了,所以我就不再贴log了。