> var r io.Reader
tty, err := os.OpenFile("/dev/tty", os.O_RDWR, 0)
if err != nil {
return nil, err
}
r = tty
r 示意性地包含 (value, type) 对 (tty, *os.File)。请注意,*os.File 类型实现了 Read 以外的方法;尽管接口值仅提供对 Read 方法的访问,但内部的值携带有关该值的所有类型信息。
另一篇文章说
就我们的示例而言,Stringer 持有类型 Binary 的 itable 列出了用于满足 Stringer 的方法,这只是 String:Binary 的其他方法 (Get) 在 itable 中没有出现。
感觉这两个人是对立的。根据第二篇文章,第一个提取物中的变量 r 应该是 (tty, io.Reader),因为这是 r 的静态类型。相反,文章说 *os.File 是 tty 的类型。如果第二个例子是正确的,那么第一个例子中的图表应该包含由 Binary 类型实现的所有方法。
我哪里错了?
呼如林
明月笑刀无情
相关分类