接口嵌套组合的特点
-
一个接口可以包含一个或者多个其他的接口
-
只要接口的所有方法被实现,则这个接口中的所有嵌套接口的方法均可以被调用
系统包中的接口嵌套组合
type Writer interface {
Write(p []byte) (n int, err error)
}
type Closer interface {
Close() error
}
/*
定义了写入关闭器(WriteCloser),这个接口由 Writer 和 Closer 两个接口嵌入。
同时拥有了 Writer 和 Closer 的特性
*/
type WriteCloser interface {
Writer
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实例赋值给io.WriteCloser关闭器
/*
对 device 实例化,由于 device 实现了 io.WriteCloser 的所有嵌入接口,因此 device 指针就会被隐式转换为 io.WriteCloser 接口。
*/
var wc io.WriteCloser = new(device)
// 写入数据
/*
调用了 wc(io.WriteCloser接口)的 Write() 方法,由于 wc 被赋值 *device,因此最终会调用 device 的 Write() 方法。
*/
wc.Write(nil)
// 关闭
wc.Close()
// 声明写入器
var writeOnly io.Writer = new(device)
// 写入数据
writeOnly.Write(nil)
}
io.WriteCloser的实现及调用过程
io.Writer 的实现调用过程