确认某类型已实现某接口

在Go中,接口是被隐式实现的,您不需要显式声明某类型要实现某接口。
这很方便,但当我们没有完全实现某接口时,编译器没法检查出这种错误。
这有一种方法可以进行编译类型检查:
type MyReadCloser struct {
}
func (rc *MyReadCloser) Read(d []byte) (int, error) {
return 0, nil
}
var _ io.ReadCloser = &MyReadCloser{}
编译上述代码会报出如下错误:
./prog.go:15:5: cannot use &MyReadCloser literal (type *MyReadCloser) as type io.ReadCloser in assignment:
*MyReadCloser does not implement io.ReadCloser (missing Close method)
我们打算让MyReadCloser结构体实现io.ReadCloser接口。但是,我们忘记了实现Close方法。
下面这行代码会在编译时就发现问题:
var _ io.ReadCloser = &MyReadCloser{}
我们打算把*MyReadCloser类型的值赋值给io.ReadCloser类型的变量。
因为*MyReadCloser类型并没有实现Close方法,编译器就会在编译时发现无效的赋值操作。
我们把值赋给空白标识符(blank identifier) _ ,是因为我们不会用这个变量做任何事情。