https://play.golang.org/p/LHkVGzmC7N
看看这个源码。
具体地说,这段代码:
bw := NewWriter(b)
w, ok := bw.wr.(io.ReaderFrom)我不明白b是字节元素,NewWrite()需要一个io.Writer。和bw.wr。(io.ReaderFrom),如何使用?
".(io.ReaderFrom)“的函数是什么意思?
和
fmt.Println(w.ReadFrom(s))W是接口,在io/io.go中,ReadFrom(s)是io.write。
type ReaderFrom interface {
ReadFrom(r Reader) (n int64, err error)
}如何在此源码中实现此接口?
在这个源码中,我找不到可以实现的地方。
发布于 2017-07-25 14:54:12
它是一个type assertion。
在本例中,它断言w不是nil,并且存储在w中的值属于接口io.ReaderFrom。如果是,则ok将为true,否则将为false。这段代码没有检查ok变量,因为作者确信它将实现io.ReaderFrom接口。
发布于 2017-07-25 15:07:33
bytes.Buffer实现了func NewWriter(w io.Writer) *Writerbytes.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,请参考类似的代码。
https://stackoverflow.com/questions/45294899
复制相似问题