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了。