接口嵌套组合
在Go语言中,不仅结构体与结构体之间可以嵌套,接口与接口间也可以通过嵌套创造出新的接口。
type Writer interface { Write(p []byte) (n int, err error) } type Closer interface { Close() error } type WriteCloser interface { Writer Closer }
在代码中使用接口嵌套组合
在代码中使用 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) }