Go 如何解释该程序实现接口

Go 如何解释该程序实现接口,go,Go,看看这个消息来源 特别是这一废料: bw := NewWriter(b) w, ok := bw.wr.(io.ReaderFrom) 我不明白b是字节元素,NewWrite()取io.Writer 和bw.wr.(io.ReaderFrom),如何使用 “(io.ReaderFrom)”的函数是什么意思 及 w是io.write,在io/io.go中,ReadFrom是接口 type ReaderFrom interface { ReadFrom(r Reader) (n int64

看看这个消息来源

特别是这一废料:

bw := NewWriter(b)
w, ok := bw.wr.(io.ReaderFrom)
我不明白b是字节元素,NewWrite()取io.Writer 和bw.wr.(io.ReaderFrom),如何使用

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

w是io.write,在io/io.go中,ReadFrom是接口

type ReaderFrom interface {
    ReadFrom(r Reader) (n int64, err error)
}
如何在此源代码中实现此接口

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

这是一个

在您的情况下,它断言
w
不是零,并且
w
中存储的值是接口
io.ReaderFrom
<如果代码>确定为
,否则为
。此代码没有检查
ok
变量,因为作者确信它将从
接口实现
io.reader。

它是一个变量

type ReaderFrom interface {
    ReadFrom(r Reader) (n int64, err error)
}
在您的情况下,它断言
w
不是零,并且
w
中存储的值是接口
io.ReaderFrom
<如果代码>确定
,否则为
。此代码没有检查
ok
变量,因为作者确信它将从接口实现
io.reader。

    type ReaderFrom interface {
        ReadFrom(r Reader) (n int64, err error)
    }
    
  • bytes.Buffer
    实现
    func(b*Buffer)写入(p[]byte)(n int,err error)
    ,因此它属于
    io.Writer
    类型,可以作为
    func NewWriter(w io.Writer)*Writer的参数

  • bytes.Buffer
    还实现了
    func(b*Buffer)ReadFrom(r io.Reader)(n int64,err error)
    ,因此它的类型为
    io.ReadFrom
    ,允许调用
    fmt.Println(w.ReadFrom(s))

  • 正如@akond提到的
    (io.ReaderFrom)
    是类型断言,表达式
    w,ok:=bw.wr.(io.ReaderFrom)
    断言
    Writer
    结构的
    wr
    字段也是类型
    io.ReaderFrom

为了进一步阅读检查,请参考类似代码。

  • bytes.Buffer
    实现
    func(b*Buffer)写入(p[]byte)(n int,err error)
    ,因此它属于
    io.Writer
    类型,可以作为
    func NewWriter(w io.Writer)*Writer的参数

  • bytes.Buffer
    还实现了
    func(b*Buffer)ReadFrom(r io.Reader)(n int64,err error)
    ,因此它的类型为
    io.ReadFrom
    ,允许调用
    fmt.Println(w.ReadFrom(s))

  • 正如@akond提到的
    (io.ReaderFrom)
    是类型断言,表达式
    w,ok:=bw.wr.(io.ReaderFrom)
    断言
    Writer
    结构的
    wr
    字段也是类型
    io.ReaderFrom


对于进一步的读取检查,它引用了类似的代码。

在本例中,ReadFrom方法是通过字节实现的。Buffer,请参阅在本例中,ReadFrom方法是通过字节实现的。Buffer,请参阅