1 回答
TA贡献1799条经验 获得超9个赞
观察到的行为是由于可变阴影:
func (rr *rot13Reader) Read(b []byte) (n int, err error) { // <-- this 'err'
rb := make([]byte, 8)
var ttl int
for {
n, err := rr.r.Read(rb) // <-- and this 'err' are different
if err == io.EOF {
return ttl, io.EOF
// break <----------------------------here's the problem
} else if err != nil {
panic(err)
} else {
for i, c := range rb[:n] {
b[i+ttl] = decodeRot13(c)
}
ttl += n
}
}
return ttl, err
}
在这条线上:
n, err := rr.r.Read(rb) // <-- and this 'err' are different
由于:=分配,一个新的实例err被创建,它隐藏了在更高范围定义的实例。这意味着当您退出 for 循环时,此版本err不可用,而nil使用设置为 的更高范围版本。
这就是为什么return ttl, err与 相同return ttl, nil,而与 完全不同的原因return ttl, io.EOF。
- 1 回答
- 0 关注
- 88 浏览
添加回答
举报