input - Golang - 读取 Os.stdin 输入但不回显

标签 input go stdin

在 golang 程序中,我正在读取来自 bufio.Reader 的 Os.Stdin 输入。

按下回车键后,程序读取输入,然后将其打印到控制台上。是否可以不将输入打印到控制台上?阅读后,我处理输入并重新打印(不再需要原始输入)。

我是这样读取数据的:

inputReader := bufio.NewReader(os.Stdin)
for {
    outgoing, _ := inputReader.ReadString('\n')
    outs <- outgoing
}

最佳答案

除了使用ANSI escape codes,我想不出其他方法。清除终端并将光标移动到特定位置(在您的情况下为第 1 列:第 1 行)。

var screen *bytes.Buffer = new(bytes.Buffer)
var output *bufio.Writer = bufio.NewWriter(os.Stdout)

这里有一些基本的辅助方法,可以简化您使用终端的工作。

// Move cursor to given position
func moveCursor(x int, y int) {
    fmt.Fprintf(screen, "\033[%d;%dH", x, y)
}

// Clear the terminal
func clearTerminal() {
    output.WriteString("\033[2J")
}

然后在您的函数中,您需要清除终端并将光标移动到终端窗口的第一列和第一行。最后你必须输出计算结果。

for {
    outgoing, err := input.ReadString('\n')

    if err != nil {
        break
    }

    if _, err := fmt.Sscanf(outgoing, "%f", input); err != nil {
        fmt.Println("Input error!")
        continue
    }

    // Clear console
    clearTerminal()
    moveCursor(1,1)

    fmt.Println(outs) // prints the computed result
}

关于input - Golang - 读取 Os.stdin 输入但不回显,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38094555/

相关文章:

javascript - 如何从 JavaScript 中的 radio 输入中获取 "unchecked"事件?

http - 去测试导入错误

Golang 相当于 JavaScript 的参数?

go - 使用 testing.Benchmark 不会产生任何输出

html - 显示 HTML 用户输入,安全问题

Java如何从具有多个字符串和 double 值的文本文件中读取一行?

java - 输入/输出 Java 示例

curl - 通过 cURL 从 stdin 上传数据作为具有特定名称的文件

python - 捕获交互式 Python shell 输出和输入

python - 你能用 Python 在 MS Windows 上将标准输入作为文件打开吗?