为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕码人2483693 2022-06-06 15:46:19
我的代码如下。这是一个简单的回声程序package mainimport (    "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 的键盘映射程序输出如下abbcc<nil>
查看完整描述

2 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

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



查看完整回答
反对 回复 2022-06-06
?
MMTTMM

TA贡献1869条经验 获得超4个赞

在下文中,我们将替换io.Copy为io.CopyN以设置更高的期望并提前关闭。


package main


import (

  "fmt"

  "io"

  "log"

  "os"

)


func main() {

  mustCopy(os.Stdout, os.Stdin)

}


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

  _, err := io.CopyN(dst, src, 2000) // 2000 is arbitrary, just big enough


  fmt.Println(err)

  if err != nil {

    log.Fatal(err)

  }

}

示例运行:


a

a

b

b

c

c

EOF

2020/05/26 02:26:04 EOF

exit status 1


查看完整回答
反对 回复 2022-06-06
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信