首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解释本程序实现接口

如何解释本程序实现接口
EN

Stack Overflow用户
提问于 2017-07-25 13:52:02
回答 2查看 60关注 0票数 0

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

看看这个源码。

具体地说,这段代码:

代码语言:javascript
复制
bw := NewWriter(b)
w, ok := bw.wr.(io.ReaderFrom)

我不明白b是字节元素,NewWrite()需要一个io.Writer。和bw.wr。(io.ReaderFrom),如何使用?

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

代码语言:javascript
复制
   fmt.Println(w.ReadFrom(s))

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

代码语言:javascript
复制
type ReaderFrom interface {
    ReadFrom(r Reader) (n int64, err error)
}

如何在此源码中实现此接口?

在这个源码中,我找不到可以实现的地方。

EN

回答 2

Stack Overflow用户

发布于 2017-07-25 14:54:12

它是一个type assertion

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

票数 2
EN

Stack Overflow用户

发布于 2017-07-25 15:07:33

  • bytes.Buffer实现了func NewWriter(w io.Writer) *Writer
  • bytes.Buffer,因此它是io.Writer类型的,并且可以用作func (b *Buffer) ReadFrom(r io.Reader) (n int64, err error)的参数也实现了io.ReadFrom,因此它是io.ReadFrom类型的,因此在前面提到的.(io.ReaderFrom) is类型断言中,表达式w, ok := bw.wr.(io.ReaderFrom)断言Writer结构的wr字段也是Writer类型的

要进一步阅读check laws-of-reflection,请参考类似的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45294899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档