登录
首页 >  Golang >  Go问答

读取器在使用 os Pipe 和 bufio 时出现EOF错误

来源:stackoverflow

时间:2024-03-23 21:45:36 461浏览 收藏

在使用 Go 标准库中的 `os.Pipe` 和 `bufio` 时,用户在尝试使用 `bufio.NewReader(r)` 读取管道 `r` 时遇到了 EOF 错误。文档表明,如果管道中没有写入任何内容,则可能会出现此错误。

问题内容

今天我编写示例代码并出现一个错误, 特别的是,我使用的是golang标准。

r, w, err := os.Pipe()
fmt.Println("pipe err:", r, w, err)
bufr := bufio.NewReader(r)
s, err := bufr.ReadString('\n')
fmt.Println("ReadString.err", err)
fmt.Println("ReadString s", s)

在第 5 行,我看到错误 eof。请帮助并解释我。 非常感谢您


正确答案


os.Pipe() 的文档:

您可以从 r 读取写入 w 的内容。您在代码中看到任何写入吗?顺便说一句,在演示中测试代码时,我遇到了死锁,而不是 eof,并且在本地阻止了应用程序。

如果您确实向 w 写了一些内容,您可以阅读:

r, w, err := os.pipe()
fmt.println("pipe err:", r, w, err)
go func() {
    fmt.println(w.write([]byte("hiho\n")))
}()
bufr := bufio.newreader(r)
s, err := bufr.readstring('\n')
fmt.println("readstring.err", err)
fmt.println("readstring s", s)

这将输出(在 Go Playground 上尝试):

pipe err: &{0xc0000b4120} &{0xc0000b4180} 
5 
ReadString.err 
ReadString s hiho

到这里,我们也就讲完了《读取器在使用 os Pipe 和 bufio 时出现EOF错误》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>