木之陽兮 卿云烂兮

0%

Golang 在EOF判断上的坑

读取文件流等操作中,通常通过 if err == io.EOF 判断文件流是否终止,此时退出循环。
通常文件中err == io.EOF时,此时读取的字节一般为0,但是在gzip.Reader中,读取到文件结尾时,err != nilread != 0,what…和python、java的习惯有点不一样啊,看样子在处理时不能遗漏最后一个读取出来的字节,所以还是把doSomeThing放到Read结束之后立即操作吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for {

buf := make([]byte, 1024)

read, err := reader.Read(buf)

if err == io.EOF {

break

}

if err != nil {

return nil, err

}

doSomeThing(buf[:read])

}