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 的实现调用过程
 
    It's a lonely road!!!
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号