在 Mac 上按下 Ctrl-D 时,Golang 错误是 <nil> 而不是 EOF

我的代码如下。这是一个简单的回声程序


package main


import (

    "fmt"

    "io"

    "log"

    "os"

)


func main() {

    mustCopy(os.Stdout, os.Stdin)

}


func mustCopy(dst io.Writer, src io.Reader) {

    _, err := io.Copy(dst, src)


    fmt.Println(err)

    if err != nil {

        log.Fatal(err)

    }

}

我还使用stty all它^D作为 eof检查了 Mac 上 EOF 的键盘映射


程序输出如下


a

b

b

c

c

<nil>


慕码人2483693
浏览 137回答 2
2回答

凤凰求蛊

根据文档golang.org/pkg/io/#Copy&nbsp;和@BrunoReis 指出的Copy行为与预期一样,err如果nil由于Copy以下原因而终止EOF

MMTTMM

在下文中,我们将替换io.Copy为io.CopyN以设置更高的期望并提前关闭。package mainimport (&nbsp; "fmt"&nbsp; "io"&nbsp; "log"&nbsp; "os")func main() {&nbsp; mustCopy(os.Stdout, os.Stdin)}func mustCopy(dst io.Writer, src io.Reader) {&nbsp; _, err := io.CopyN(dst, src, 2000) // 2000 is arbitrary, just big enough&nbsp; fmt.Println(err)&nbsp; if err != nil {&nbsp; &nbsp; log.Fatal(err)&nbsp; }}示例运行:aabbccEOF2020/05/26 02:26:04 EOFexit status 1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go