go - 如何解释这个程序实现接口(interface)

标签 go

https://play.golang.org/p/LHkVGzmC7N

看看这个来源。

特别是这个废料:

bw := NewWriter(b)
w, ok := bw.wr.(io.ReaderFrom)

不明白b是bytes元素,NewWrite()取一个io.Writer。 和bw.wr.(io.ReaderFrom),怎么用?

“.(io.ReaderFrom)”的函数是什么意思?

   fmt.Println(w.ReadFrom(s))

w 是 io.write,在 io/io.go 中 ReadFrom(s) 是接口(interface)。

type ReaderFrom interface {
    ReadFrom(r Reader) (n int64, err error)
}

如何在这个源码中实现这个接口(interface)?

在这个来源中,我找不到任何地方可以实现。

最佳答案

这是一个type assertion .

在您的例子中,它断言 w 不是 nil,并且存储在 w 中的值属于 io.ReaderFrom 接口(interface)。 ok 如果是,则为 true,否则为 false。此代码不检查 ok 变量,因为作者确信它将实现 io.ReaderFrom 接口(interface)。

关于go - 如何解释这个程序实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45294899/

相关文章:

go - 解析文件中的每一行后 scanner.Text() 的类型是什么?

go - 有没有惯用的方法来malloc和memcpy结构体?

go - 检查文件是否位于给定目录中

arrays - 将十六进制值的字符串转换为 []byte 表示

json - 为 json 对象声明一个结构

go - makefile 中的 protoc 以构建 protobuf

google-app-engine - appengine aetest 的不一致行为

sorting - 在 go lang 中按不同维度对点(结构)进行排序

json - 编码类型时如何将方法结果嵌入到 JSON 输出中?

go - Intellisense 不工作 golang 测试文件