在golang中,结构体内嵌结构体,接口内嵌接口都很常见,但是结构体内嵌接口很少见。它是做什么用的呢?
当我们需要重写实现了某个接口的结构体的(该接口)的部分方法,可以使用结构体内嵌接口。
空接口:需要先断言类型,再通过变量访问方法。

确定接口,匿名字段,内嵌方法,可以直接访问。不是匿名字段,需要通过变量名访问。

条件:
空接口:赋值接口体的方法不能重写,因为空接口一开始不能确定类型,并且不能定义为匿名字段。
确定接口:
假设现在有一个需求,重写Cat的Walk方法,并且Speak方法保持不变。
当然我们可以重新创建一个结构体,实现接口中所以的方法来实现。但是如果这个接口又很多方法,全部实现一遍就有点小题大做了,而且我们只是需要重写部分方法,其它方法保持不变。
这个时候我们可以通过结构体内嵌接口来实现。

新增一个JiaFeiCat结构体,初始化时将Cat类型的变量传入,JiaFeiCat结构体定义一个Walk方法,这个方法会覆盖Cat的同名方法,从而实现了Walk方法的重写。
结构体内嵌接口的作用:
参考: