本文主要是介绍Go语言结构体内嵌接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
在golang中,结构体内嵌结构体,接口内嵌接口都很常见,但是结构体内嵌接口很少见。它是做什么用的呢?
当我们需要重写实现了某个接口的结构体的(该接口)的部分方法,可以使用结构体内嵌接口。
示例
定义一个Animal接口,有Speak和Walk方法。
定义一个结构体Cat,实现Animal接口的方法。
package mainimport "fmt"type Animal interface {Speak()Walk()
}type Cat struct{}func (c Cat) Speak() {fmt.Println("喵喵喵...")
}func (c Cat) Walk() {fmt.Println("喵喵正在行走")
}func main() {var c Catc.Speak()c.Walk()
}
假设现在又一个需求,重写Cat的Walk方法,并且Speak方法保持不变。
当然我们可以重新创建一个结构体,实现接口中所以的方法来实现。但是如果这个接口又很多方法,全部实现一遍就有点小题大做了,而且我们只是需要重写部分方法,其它方法保持不变。
这个时候我们可以通过结构体内嵌接口来实现。
新增一个JiaFeiCat结构体,初始化时将Cat类型的变量传入,JiaFeiCat结构体定义一个Walk方法,这个方法会覆盖Cat的同名方法,从而实现了Walk方法的重写。
总结
结构体内嵌接口的作用:
- 不依赖具体实现:即接口为A,结构体B1、B2实现了接口A,结构体C内嵌了A,那么C.A可以通过B1/B2实例化;
- 对接口类型进行重写:当C.A通过B1实例化后,C和B1的关系,可以转变为结构体C内嵌结构体B1,那么C可以直接使用B1中的所有方法,当然C也可以对B1中的方法进行重写,这里官方文档这样解释“Interface and we can override a specific method without having to define all the others.”
参考:
golang接口用法之:结构体内嵌匿名接口_golang 匿名接口-CSDN博客
这篇关于Go语言结构体内嵌接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!