go语言学习笔记 — 接口 — 接口的嵌套组合:把多个接口放到一个接口内
在go中,结构体可以内嵌,创建出新的结构体;同理,接口也可以内嵌,创建出新的接口。接口与接口嵌套组合生成新接口,只要接口的所有方法都被实现,则这个接口中的所有嵌套接口均可被调用。
系统包中的接口嵌套组合
io包定义了写入器(Writer)、关闭器(Closer)和写入关闭器(WriteCloser)3个接口,代码如下:
// 写入接口
type Writer interface {
Write(p []byte)
}
// 关闭接口,实现内存资源的释放
type Closer interface {
Close() error
}
// 写入关闭接口,同时拥有Writer和Closer的特性
type WriteCloser interface {
Writer // 由两个接口嵌套组合,生成扩展接口
Closer
}
在应用代码中使用接口嵌套组合
package main
import (
"io"
"testing"
)
// // io包中的写入接口
// type Writer interface {
// Write(p []byte)
// }
// // io包中的关闭接口,实现内存资源的释放
// type Closer interface {
// Close() error
// }
// // io包中的写入关闭接口,同时拥有Writer和Closer的特性
// type WriteCloser interface {
// Writer // 由两个接口嵌套组合,生成扩展接口
// Closer
// }
// 声明一个设备结构体,用于模拟一个虚拟设备
type device struct{}
// 向结构体绑定类似io.Writer的Write方法
func (d *device) Write(p []byte) (n int, err error) {
return 0, nil
}
// 向结构体绑定类似io.Closer的Close方法
func (d *device) Close() error {
return nil
}
func main() {
// device结构体实例化wc,由于device类型已经实现了io.WriteCloser的所有内嵌接口,因此wc的类型可以看作是io.WriteCloser接口类型(被隐式转换了)
var wc io.WriteCloser = new(device)
// wc实例调用Write方法,写入数据
wc.Write(nil)
// wc实例调用Close方法,关闭设备
wc.Close()
// 声明写入器writeOnly,类型是io.Writer,并赋值device新实例
var writeOnly io.Writer = new(device)
// writeOnly实例只调用Write方法,写入数据
writeOnly.Write(nil)
}
给io.WriterCloser和io.Writer更换不同的实现者(结构体方法),可以动态地切换实现代码。
到此这篇关于“go语言学习笔记 — 接口 — 接口的嵌套组合:把多个接口放到一个接口内”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!您可能感兴趣的文章:
go语言学习笔记 — 接口 — 接口的嵌套组合:把多个接口放到一个接口内
go 获取函数地址_Go语言基础--接口浅析
Go 语言到底适合干什么?
想系统学习GO语言(Golang
2020-10-18Go语言接口
第07章 Go语言接口(interface),Golang接口(interface)
Go语言接口interface
MySQL中group_concat函数使用例子
基于类型系统的面向对象编程语言Go
asp.net常用http状态码表