我正在编写一些代码,这些代码需要通过包中的ReadBytes方法几乎满足的功能bufio.具体来说,该方法从a读取,Reader直到遇到特定字节.我需要读取的内容,直到遇到几个字节(主要是空格,换行符和制表符)中的一个.
我查看了库的源代码,我知道如果可以访问bufio结构使用的内部缓冲区该怎么办.有什么方法可以"修补"包裹并添加另一种方法吗?或者另一种获得我需要的功能的方法?
这种方法的一些事情(警告:未经测试的代码):
type reader struct{
*bufio.Reader // 'reader' inherits all bufio.Reader methods
}
func newReader(rd io.Reader) reader {
return reader{bufio.NewReader(rd)}
}
// Override bufio.Reader.ReadBytes
func (r reader) ReadBytes(delim byte) (line []byte, err error) {
// here goes the monkey patch
}
// Or
// Add a new method to bufio.Reader
func (r reader) ReadBytesEx(delims []byte) (line []byte, err error) {
// here goes the new code
}
Run Code Online (Sandbox Code Playgroud)
编辑:我应该指出,这并不利于访问原始包装内部(非出口的实体).感谢Abhay在你的评论中指出这一点.