在 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/