golang读取多行以上的文本输入并停止ctrl + s

时间:2014-12-27 14:25:01

标签: input go readlines

如何在golang,console input中读取多行。

reader := bufio.NewReader(os.Stdin)

fmt.Println("Enter Text:")

text, _ := reader.ReadString('\n')

如果用户点击,我必须如何更改ReadString(???)以停止读取: ctrl + s 新行(\n)必须仍然是输入的组成部分。

是否有一些库/框架?

感谢您的帮助。

干杯

1 个答案:

答案 0 :(得分:1)

这是Linux的答案(可以适用于其他* nix平台)

Ctrl+S是控制字符DC3,表示“XOFF,停止发送”。如果按Ctrl+S,终端将冻结。

Ctrl+Q是一个控制字符DC1,它的意思是“XON,继续发送”,在Ctrl+S解冻后必须这样做。

要使用Ctrl+S,请先使用XON/XOFF禁用stty -ixon(可能在启动脚本中) 禁用XON/XOFF后,示例代码如下(DC3是HEX:13 / DEC:19在ASCII表中);

package main

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

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Println("Enter Text:")
    text, _ := reader.ReadString('\x13')
    fmt.Println(text)
}