Go 接口嵌套组合

21 min read

接口嵌套组合

在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)

}