1 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
觀察到的行為是由于變量陰影造成的:
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
由于:=分配,會創(chuàng)建一個(gè)新的實(shí)例err,它會隱藏在更高范圍內(nèi)定義的實(shí)例。這意味著當(dāng)您退出 for 循環(huán)時(shí),該版本的err不可用,并且nil使用設(shè)置為 的更高范圍的版本。
這就是為什么return ttl, err與相同return ttl, nil,又完全不同的原因return ttl, io.EOF。
- 1 回答
- 0 關(guān)注
- 183 瀏覽
添加回答
舉報(bào)