bufio的ReadLine是不是必须检测io.EOF

tablecell · 2021-03-15 13:44:30 · 2968 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2021-03-15 13:44:30 的主题,其中的信息可能已经有所发展或是发生改变。

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {

    filename := "go.sum"

    fi, err := os.Open(filename)
    if err != nil {
        panic(err)
    }
    defer fi.Close()

    buf := bufio.NewReader(fi)

    for {

        line, _, err := buf.ReadLine()
//if err == io.EOF { break }
        if err != nil {
            panic(err)
        }

        fmt.Println(string(line))

    }
}

panic: EOF

goroutine 1 [running]: main.main() ReadLine-EOF.go:28 +0x325 exit status 2


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2968 次点击  
加入收藏 微博
6 回复  |  直到 2021-03-15 19:49:47
focusonline
focusonline · #1 · 4年之前

不一定只遇到EOF错误吧, 只要是错误都要检测的. 只要不是nil 就跳出循环 其中如果是EOF那就是正常结束其他的可能要报错.

tablecell
tablecell · #2 · 4年之前
focusonlinefocusonline #1 回复

不一定只遇到EOF错误吧, 只要是错误都要检测的. 只要不是nil 就跳出循环 其中如果是EOF那就是正常结束其他的可能要报错.

如果按行读,不处理io.EOF 怎么写

focusonline
focusonline · #3 · 4年之前
tablecelltablecell #2 回复

#1楼 @focusonline 如果按行读,不处理io.EOF 怎么写

上面说了吧, 遇到eof也是err, 其他的也是, 只不过eof算是个正常的结束信号. 你首先需要处理err, 然后里面判断是不是正常的结束了(虽然看上去是EOF错误)

zzustu
zzustu · #4 · 4年之前
if err != nil {
    if err == io.EOF {
        break
    }
    panic(err)
}
tablecell
tablecell · #5 · 4年之前
focusonlinefocusonline #3 回复

#2楼 @tablecell 上面说了吧, 遇到eof也是err, 其他的也是, 只不过eof算是个正常的结束信号. 你首先需要处理err, 然后里面判断是不是正常的结束了(虽然看上去是EOF错误)

io.EOF 算err 还是不算err ?

jarlyyn
jarlyyn · #6 · 4年之前
tablecelltablecell #5 回复

#3楼 @focusonline io.EOF 算err 还是不算err ?

算啊

你预期会读到数据,结果没读到,不是error是什么……

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传