为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
蛊毒传说 2022-12-26 10:20:34
所以我试图让项目打印到命令行,我想快速完成,所以我使用这种方法打印到 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 完成的
查看完整描述

1 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

好吧,我打印了 1 行太多,这导致数据在返回 0,0 时没有被覆盖,我的印象是 x、y 是相对于视口的,所以数据滚动到屏幕之外。

不同的行为确实是由不刷新缓冲区引起的。因此,在我打印到屏幕的 for 循环中包含一个刷新修复了这个问题。



查看完整回答
反对 回复 2022-12-26
  • 1 回答
  • 0 关注
  • 70 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信