【问题标题】:Golang: How to terminate the bufio Scan() from terminal?Golang:如何从终端终止 bufio Scan()?
【发布时间】:2016-03-02 17:50:08
【问题描述】:

我正在运行The Go Programming Language中的dup1 example这本书(相关代码如下所示):

for input.Scan() {
    counts[input.Text()]++
}

输入几行文本后,我想终止Scan() 方法。我试过 Ctrl+D、Ctrl+Z 和许多其他组合键都没有运气。只有 Ctrl+C 有效,但这也会终止程序。

如何在不退出程序的情况下从终端终止Scan()

我正在使用 os.Stdin 在 Windows 7 上进行开发。

[编辑]

Ctrl+Z 不起作用:

谢谢。但这对我不起作用:

C:\prj\src\gopl\>go run dup1.go
I have tried all these combinations from the terminal
^Z
^X
^V
^B
^N

^A
^D
^F
^G

^K
^L
^Q
^W
^E
^R
^T
^Y
^U
^O
^P
2(Notes: only Ctrl + C works here)

C:\prj\src\gopl\>

如果我在 Ubuntu 中运行此程序,则只有 Ctrl + D 有效,Ctrl + Z停止该程序,Ctrl + C 将终止它。

【问题讨论】:

  • 据我所知,在 Windows 下,EOF 映射为 Ctrl+Z。也许你的终端将它重新映射到其他东西,检查它的配置。
  • 您确定要在换行符的开头键入 Ctrl+Z 吗?这可能是 Scan 实际接收 EOF 所必需的。

标签: go


【解决方案1】:

没有人问,但我在 OSX 中遇到了这个问题,并且在搜索中出现了这个问题。当在行首按下 control-D 时,Mac OSX 终端会识别 EOF。

【讨论】:

    【解决方案2】:

    ctrl + shift + d 如果 EOF 是新行中的第一个字符,则将其发送到终端。

    go run main.go
    
    > line one
    > another line
    > another line
    > ctrl + shift + d
    

    你应该会看到输出

    2 another line
    

    如此评论中所述 https://stackoverflow.com/a/21658005/1522019
    您可以使用stty all 查找 EOF 组合。我一直在做ctrl + d,在我看来和ctrl + D是一样的。

    【讨论】:

      【解决方案3】:

      对于 Windows,换行

      <Ctrl+Z><Enter>
      

      【讨论】:

      • 这通常用于 C 中的 EOF,尽管我在 Windows 7 上使用 golang 遇到了同样的问题。
      • 适用于 Windows10 命令行。 Ctrl+Z(打印 ^Z)+ Enter。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2020-05-25
      • 2017-09-09
      • 2020-10-13
      • 2017-03-11
      • 2020-09-19
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      相关资源
      最近更新 更多