golang标准库io.readfull有bug?

io.readfull源码如下:

image.png![image.png]

如果ReadAtLeast函数中,n>min时,就会直接返回n,而readfull传进去的min是len(buf),所以最终可能返回的n>len(buf),这岂不是有问题吗??还是说我理解的不到位,请大佬讲解下。

共 2 个回复


night556

这个是没有问题的,假设buf长度为10,在image.png这个逻辑之后就会直接返回,nn为10,那么n也为10,退出循环,刚好为buf的长度。

# 0

me@bzza.com

没问题啊兄台。io.Reader中的read是你自己定义的。

假使你的len(buf)==10:

如果你read方法不遵守规则定义一次性读完所有需要读的内容并返回长度是27,for就不需要循环了,直接n就是27了。

如果你的read方法遵守规则读满len(buf)长度就返回,那就n==10.

如果你的read方法是一次读1长度的,没错误情况下那就循环到len(buf)那么多次才退出循环。

一个自学golang的人遇上这样的问题会设置log的形式跟进每一步,就能非常容易找出问题所在,我不习惯断点调试.

从来没有不能解决的问题。

# 1