猿问

Go:为什么在使用缓冲区打印到 std.out 时 ANSI exscape 代码不起作用?

所以我试图让项目打印到命令行,我想快速完成,所以我使用这种方法打印到 cmd,因为它比 fmt.print 更快:


buf := bufio.NewWriter(os.Stdout)

fmt.Fprint(buf, "text here")

我已经运行了几次测试,这是打印到屏幕的最快方法。但是有一个问题,我还想打印 ansi 转义码来移动光标,改变颜色等。


这段代码有效,它应该做的是将光标位置移动到 0,0 并且它确实


fmt.Printf("\033[%d;%dH", 0, 0)

但是,当我尝试使用缓冲区来实现相同的目的时,它什么也不做


start := fmt.Sprintf("\033[%d;%dH", 0, 0)

buf := bufio.NewWriter(os.Stdout)

fmt.Fprint(buf, start)

我在这里做错了什么?有没有办法使用缓冲区来实现这一点?非常感谢


这是在 Windows 11 上使用 cmd 而不是 powershell 完成的


蛊毒传说
浏览 71回答 1
1回答

POPMUISE

好吧,我打印了 1 行太多,这导致数据在返回 0,0 时没有被覆盖,我的印象是 x、y 是相对于视口的,所以数据滚动到屏幕之外。不同的行为确实是由不刷新缓冲区引起的。因此,在我打印到屏幕的 for 循环中包含一个刷新修复了这个问题。
随时随地看视频慕课网APP

相关分类

Go
我要回答