bytes.Reader,替换底层[]字节数组

时间:2014-12-23 21:52:03

标签: pointers methods go embedding

我一直试图找到一种很好的方式来传递Reader接口{},而无需重新创建与io.Reader关联的方法。

这就是我正在使用的:

type EZReader struct {
    data *bytes.Reader
}

func (self *EZReader) Replace(input []byte) {
    self.data = bytes.NewReader(input)
}

func (self *EZReader) Read(p []byte) (n int, err error) {
    return self.data.Read(p)
}

感觉,不对,是否有更好的方法来做到这一点?

我的想法是,然后我可以将这个io.Reader移交给一个函数并将底层数组更改为

我需要它而不必重新分配想要使用它的对象,在本例中是json解码器。

1 个答案:

答案 0 :(得分:1)

如果embed是结构中的一个字段,那么该字段的所有方法也可以在结构上调用。所以,如果你写

type EZReader struct {
    *bytes.Reader
}

你不必重新实现Read()。这样的字段就像它被命名为Reader一样。请注意,您不能以这种方式暴露字段。