Following is a snippet from one of the Go libs. Could anyone please point out the significance of r.(byteReader)
? The syntax usage is not very obvious to a novice. byteReader
is a defined interface and does not seem to be the member of io.Reader
. Since, this seems to be some kind of nifty code, can anyone provide some insight.
The author mentions: "wrap it in a bufio.NewReader if it doesn't support ReadByte" pattern. 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)
}