接口的嵌套组合——将多个接口放在一个接口内
在 Go 语言中,不仅结构体与结构体之间可以嵌套,接口与接口之间也可以通过嵌套创造出新的接口。
接口与接口嵌套组合而成了新接口,只要接口的所有方法被实现,则这个接口中的所有嵌套接口的方法均可以被调用。
1、系统包中的接口嵌套组合
Go 语言中的 io 包中定义了写入器(Writer)、关闭器(Closer)和写入关闭器(WriteCloser)3个接口,代码如下:
type Writer interface{
write(p []byte) (n int, err error)
}
type Closer interface{
Close() error
}
type WriteCloser interface{
Writer
Closer
}
2、在代码中使用皆苦嵌套组合
在代码中使用 io.Writer、io.Closer 和 io.WriteCloser 这 3 个接口时,只需要按照接口实现的规则实现 io.Writer 接口和 io.Closer 接口即可。
io.WriteCloser 接口在使用时,编译器会根据接口的实现者确认它们是否同时实现了 io.Writer 和 io.Closer 接口,详细代码如下:
package main
import "io"
//声明一个设备结构
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 的实例
var wc io.WriteCloser = new(device)
//写入器
wc.Write(nil)
//关闭设备
wc.Close()
//声明写入器,并赋予 device 的新实例
var writeOnly io.Writer = new(device)
//写入数据
writeOnly.Write(nil)
}