This question already has answers here:
What is this “err.(*exec.ExitError)” thing in Go code?
(2个答案)
5年前关闭。
以下是其中一个Go库的摘录。任何人都可以指出
作者提到:“如果不支持ReadByte,则将其包装在bufio.NewReader中”。 https://github.com/dave-andersen/deltagolomb/blob/master/deltagolomb.go
(2个答案)
5年前关闭。
以下是其中一个Go库的摘录。任何人都可以指出
r.(byteReader)
的重要性吗?对于新手来说,语法用法不是很明显。 byteReader
是已定义的接口(interface),似乎不是io.Reader
的成员。因为,这似乎是一种漂亮的代码,所以任何人都可以提供一些见识。作者提到:“如果不支持ReadByte,则将其包装在bufio.NewReader中”。 https://github.com/dave-andersen/deltagolomb/blob/master/deltagolomb.go
type byteReader interface {
io.Reader
ReadByte() (c byte, err error)
}
func makeReader(r io.Reader) byteReader {
if rr, ok := r.(byteReader); ok {
return rr
}
return bufio.NewReader(r)
}
最佳答案
r.(byteReader)
称为类型断言。即使io.Reader
本身未实现byteReader
接口(interface),存储在r
中的值仍可能实现byteReader
。因此,通过进行类型断言,可以断言是否是这种情况:
The specification状态:
编辑
注释“将其包装在bufio.NewReader中”是指makeReader
提供的io.Reader
;如果它没有实现byteReader
,makeReader
会将它包装在一个确实实现bufio.Reader
的bytesReader
中,然后返回它。
10-05 22:29