【问题标题】:bytes.Reader, replacing underlying []byte arraybytes.Reader,替换底层 []byte 数组
【发布时间】:2015-02-22 01:53:23
【问题描述】:

我一直在尝试寻找一种无需重新创建与 io.Reader 关联的方法即可移交 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 解码器。

【问题讨论】:

    标签: pointers methods go embedding


    【解决方案1】:

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

    type EZReader struct {
        *bytes.Reader
    }
    

    您不必重新实现Read()。这样一个字段的行为就好像它被命名为Reader。请注意,您无法避免以这种方式公开该字段。

    【讨论】:

    • 我认为这是我感到困惑的地方,如何在不重新分配实际结构的情况下重新分配嵌入字段?
    • 哦...我明白了,这就是我缺少的连接。 *bytes.Reader 变为 ezreader.Reader。现在这么清楚。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 2012-05-18
    • 2020-05-17
    相关资源
    最近更新 更多