【问题标题】:Reader interface and the Read method in golangGolang 中的 Reader 接口和 Read 方法
【发布时间】:2018-04-03 01:57:56
【问题描述】:

我正在关注 golang 之旅,我被要求:

实现一个实现 io.Reader 并从 io.Reader 读取的 rot13Reader,通过将 ROT13 替换密码应用于所有字母字符来修改流。

我首先实现了 *rot13Reader 的方法

   type rot13Reader struct {
    r io.Reader
}

func (r *rot13Reader) Read(p []byte) (n int, e error){


}

但是我无法理解这种 Read 方法。

p 是否包含所有读取的字节?因此我应该做的就是遍历它们并应用 ROT13 替换?

我知道它应该在文件末尾返回读取的字节数和 EOF 错误,但是我不确定何时以及如何调用此方法。那么回到我最初的问题,p 是否包含所有读取的数据?如果没有那我怎么能得到它?

【问题讨论】:

    标签: io go byte


    【解决方案1】:

    您应该只扫描和“rot13”n 字节(io.Readerrot13Reader 中读取的字节)。

    func (r *rot13Reader) Read(p []byte) (n int, e error){
        n, e = r.r.Read(p)
        for i:=range(p[:n]) {
           p[i]=rot13(p[i])
        }
        return
    }
    

    rot13Reader 封装任何读卡器,并在所述封装读卡器上调用Read
    它返回 rot13 的内容和读取的字节数。

    【讨论】:

    • @Bula 我已经编辑了答案:它是rot13Reader 接收者的名字。我已将其更改为r,但不太清楚,因为r 也是 io.Readerrot13Reader 结构中的名称。
    • 不错的答案 tnx。小细节。为了正常工作,我认为您应该更改第一个分配: n, e = r.r.Read(p) .. 以使命名返回正常工作。问候
    • @FabianoTarlao 不要犹豫直接编辑答案:这将使每个人都受益。
    • 我更新了我的评论,@VonC 我来自 SO 多年,但我一直认为这样做有点“不礼貌”。 :-) 我有点害羞。对不起。我现在就这样做。 (此外,我只是在学习 GO,所以.. 我还是有点犹豫)。我现在就做。
    • @Fab 没问题,我会审核您的编辑。感谢您的贡献
    猜你喜欢
    • 2016-12-20
    • 1970-01-01
    • 2023-03-06
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    相关资源
    最近更新 更多