go - 向现有(标准)类型添加新方法

标签 go

我正在编写一些需要bufio 包中的ReadBytes 方法几乎可以满足的功能的代码。具体来说,该方法从 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
}

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

关于go - 向现有(标准)类型添加新方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10815367/

相关文章:

unicode - Go 中 unicode 中 IsDigit 和 IsNumber 的区别

go - 如何指定多个返回值的类型

不同类型的Golang接口(interface)——传值时的困惑

go - 在 Go 中转换一片 slice ?

json - 如何在 Go 中读取 JSON 对象而不对其进行解码(用于读取大流)

go - 传递与 Golang 中指定的参数类型不同的参数类型?

windows - 如何使用特定环境值运行 go get 命令?

git - Hugo - 多语言支持错误

math - 如何从golang中的数组中获取偏度值

google-app-engine - AppEngine IO 复制问题导致 "API error 10 (file: FILE_NOT_OPENED)"