1.28 Go之接口的嵌套组合


1.28 Go之接口的嵌套组合

接口嵌套组合的特点

  • 一个接口可以包含一个或者多个其他的接口

  • 只要接口的所有方法被实现,则这个接口中的所有嵌套接口的方法均可以被调用

系统包中的接口嵌套组合

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 的实现调用过程