gpt4 book ai didi

go - 为什么使用 naked return 和 normal return 会给我不同的结果?

转载 作者:数据小太阳 更新时间:2023-10-29 03:38:19 35 4
gpt4 key购买 nike

我正在玩 Golang 之旅,我想知道为什么使用 naked return 会给我正确的结果,而正常的则不会。这是我遇到这个问题的练习https://tour.golang.org/methods/12 .

目标是创建一个可以破译 rot13 的阅读器。 rot13 功能已经过测试。

func (r rot13Reader) Read(b []byte) (n int, err error) {
n, err = r.r.Read(b)
for i, v := range b {
b[i] = rot13(v)
}
return
}

上面的代码给出了正确的结果。

func (r rot13Reader) Read(b []byte) (int, error) {
for i, v := range b {
b[i] = rot13(v)
}
return r.r.Read(b)
}

这不会改变输入流的任何内容。

谁能解释一下为什么?提前谢谢你。

最佳答案

返回不是问题,但在第一种情况下,您在转换数据之前读取数据,而在第二种情况下,您在缓冲区中转换垃圾数据,然后才读取数据(并简单地传递什么已从底层读者那里阅读)。

虽然这不是正确性所必需的,但我建议您不要每次都转换整个缓冲区,而只转换已读取的部分,即将您的第一个示例从 更改为 i, v := range bfor i, v := range b[:n]。这是因为 io.Read 调用无法修改 slice b 的长度,只能修改其内容。

查看 io.Reader 的文档,它应该会让您对这个界面的预期工作方式有更多的了解。

关于go - 为什么使用 naked return 和 normal return 会给我不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30912457/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com