我正在阅读 Go 的 io 包的源代码,但遇到了一个我不完全理解的片段。这里是
func WriteString(w Writer, s string) (n int, err error) {
if sw, ok := w.(stringWriter); ok {
return sw.WriteString(s)
}
return w.Write([]byte(s))
}
在哪里
type stringWriter interface {
WriteString(s string) (n int, err error)
}
type Writer interface {
Write(p []byte) (n int, err error)
}
类型断言w.(stringWriter)
断言 w 的动态类型(即 Writer)实现了 stringWriter 接口。鉴于 stringWriter 和 Writer 的类型定义,我看不出这是怎么可能的。假设这段代码是正确的,我错过了什么?