6

ReadBytes我正在编写一些代码,这些代码需要包中的方法几乎可以满足的功能bufio。具体来说,该方法从 a 读取,Reader直到遇到特定字节。我需要一些可以读取的内容,直到它遇到几个字节中的一个(主要是空格、换行符和制表符)。

我查看了库的源代码,如果我可以访问bufio结构使用的内部缓冲区,我知道该怎么做。有什么办法可以“猴子补丁”包并添加另一种或两种方法吗?或者另一种方式来获得我需要的功能?

4

2 回答 2

5

这种方法的一些东西(注意:未经测试的代码):

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
}

编辑:我应该注意到这无助于访问原始包内部(非导出实体)。感谢 Abhay 在您的评论中指出这一点。

于 2012-05-30T11:47:29.073 回答
1

通常最好使用包 API 来解决问题。但是,如果您有令人信服的理由访问未导出的功能,请复制包源并将其破解。BSD 风格的许可证与它们一样自由。

于 2012-05-30T22:52:40.933 回答