Go的io
包 包含以下接口(其中之一):
type ByteReader interface {
ReadByte() (c byte, err error)
}
type ByteScanner interface {
ByteReader
UnreadByte() error
}
type ByteWriter interface {
WriteByte(c byte) error
}
type RuneReader interface {
ReadRune() (r rune, size int, err error)
}
type RuneScanner interface {
RuneReader
UnreadRune() error
}
但是没有 RuneWriter
接口:
type RuneWriter interface {
WriteRune(r rune) (size int, err error)
}
Is there a reason that RuneWriter
is missing?
bufio.Reader
是标准包中唯一可以实现你的RuneWriter
的东西(而且bufio.Reader
还有许多其他方法也不是任何接口的一部分)。 - Dave CRuneWriter
添加到io包中也没有任何帮助。 - Dave CWriteRune
的东西,你可以选择a)创建自己的接口并将其作为参数接受,或者b)接受一个io.Reader
参数,如果类型断言到你自己的接口失败,则将其包装在bufio.Reader
中。由于bufio.Reader
是标准包中唯一实现它的东西,因此(a)实际上只能强制调用者在bufio.Reader
中进行包装(或者他们自己版本的类似物)。 - Dave Cbufio.Reader
是唯一实现它的说法是错误的。bytes.Buffer
也实现了它。而且这些都是唯一实现io.ByteWriter
的东西。那么为什么它们有io.ByteWriter
而没有io.RuneWriter
呢? - Matt