【问题标题】:golang reading text input over more than one line and stop ctrl+sgolang 读取超过一行的文本输入并停止 ctrl+s
【发布时间】:2015-02-24 09:59:12
【问题描述】:

如何在 golang 中读取多行,控制台输入。

reader := bufio.NewReader(os.Stdin)

fmt.Println("Enter Text:")

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

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

是否有一些库/框架可以做到这一点?

感谢您的每一个帮助。

干杯

【问题讨论】:

标签: input go readlines


【解决方案1】:

这是一个适用于 Linux 的答案(也适用于其他 *nix 平台)

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

Ctrl+Q是控制字符DC1,表示“XON,继续发送”,需要在Ctrl+S之后解冻。

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

package main

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

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

【讨论】:

    猜你喜欢
    • 2017-01-12
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 2017-12-03
    • 2015-05-13
    • 1970-01-01
    相关资源
    最近更新 更多