Go语言中接口组合的实现方法
2024-09-30 02:21:08
在Go语言中,可以在接口A中组合其它的一个或多个接口(如接口B、C),这种方式等价于在接口A中添加接口B、C中声明的方法。
代码如下:
//接口中可以组合其它接口,这种方式等效于在接口中添加其它接口的方法
type Reader interface {
read()
}
type Writer interface {
write()
}
//定义上述两个接口的实现类
type MyReadWrite struct{}
func (mrw *MyReadWrite) read() {
fmt.Println("MyReadWrite...read")
}
func (mrw *MyReadWrite) write() {
fmt.Println("MyReadWrite...write")
}
//定义一个接口,组合了上述两个接口
type ReadWriter interface {
Reader
Writer
}
//上述接口等价于:
type ReadWriterV2 interface {
read()
write()
}
//ReadWriter和ReadWriterV2两个接口是等效的,因此可以相互赋值
func interfaceTest0104() {
mrw := &MyReadWrite{}
//mrw对象实现了read()方法和write()方法,因此可以赋值给ReadWriter和ReadWriterV2
var rw1 ReadWriter = mrw
rw1.read()
rw1.write()
fmt.Println("------")
var rw2 ReadWriterV2 = mrw
rw2.read()
rw2.write()
//同时,ReadWriter和ReadWriterV2两个接口对象可以相互赋值
rw1 = rw2
rw2 = rw1
}
type Reader interface {
read()
}
type Writer interface {
write()
}
//定义上述两个接口的实现类
type MyReadWrite struct{}
func (mrw *MyReadWrite) read() {
fmt.Println("MyReadWrite...read")
}
func (mrw *MyReadWrite) write() {
fmt.Println("MyReadWrite...write")
}
//定义一个接口,组合了上述两个接口
type ReadWriter interface {
Reader
Writer
}
//上述接口等价于:
type ReadWriterV2 interface {
read()
write()
}
//ReadWriter和ReadWriterV2两个接口是等效的,因此可以相互赋值
func interfaceTest0104() {
mrw := &MyReadWrite{}
//mrw对象实现了read()方法和write()方法,因此可以赋值给ReadWriter和ReadWriterV2
var rw1 ReadWriter = mrw
rw1.read()
rw1.write()
fmt.Println("------")
var rw2 ReadWriterV2 = mrw
rw2.read()
rw2.write()
//同时,ReadWriter和ReadWriterV2两个接口对象可以相互赋值
rw1 = rw2
rw2 = rw1
}
最新文章
- Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
- python lambda
- Matlab中plot函数参数解析
- 理解Android的手势识别
- storm spout的速度抑制问题
- JavaScript基本概念(对象)
- Excel设置下拉选项的方法
- 一、Hbase的安装
- 为什么不能将客户端的连接请求跳转或转发到本机lo回环接口上?
- Connect Appium Server Fail.A new session could not be created
- android官方技术文档翻译——switch 语句转换
- 转-filebeat 源码分析
- 为什么PPIO要设计支付代理节点?
- Django form表单功能的引用(注册,复写form.clean方法 增加 验证密码功能)
- [转]SQL Collation冲突解决 临时表
- 未能从程序集“System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加载类型“System.Transactions.TransactionScopeAsyncFlowOption”
- javaweb项目运行时生成的Servers项目作用
- 四则运算截图and代码
- Python中使用LMDB
- Unity3D - 资源管理
热门文章
- C#将数据导入到Excel表格中
- [CSP-S模拟测试63]题解
- undefined null测试
- Kali 和 Centos、Windows三系统的安装事项!
- PHP基础知识总结(五) php面试题
- 嵌入式C语言4.3 C语言内存空间的使用-指针与运算符
- python作业/练习/实战:3、实现商品管理的一个程序
- SpringBoot扫描不到类,注入失败A component required a bean of type 'XXService' that could...
- JSON Web Token (JWT),服务端信息传输安全解决方案。
- ELK日志分析平台.1-搭建