登录
首页 >  Golang >  Go问答

为什么在使用缓冲区打印到标准输出时,ANSI转义代码无效?

来源:stackoverflow

时间:2024-02-07 17:36:22 162浏览 收藏

golang学习网今天将给大家带来《为什么在使用缓冲区打印到标准输出时,ANSI转义代码无效?》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

所以我试图将项目打印到命令行,并且我想快速完成,所以我使用此方法打印到 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 行,这导致返回到 0,0 时数据不会被覆盖,我的印象是 x, y 是相对于视口的,因此数据滚动到屏幕之外。

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

好了,本文到此结束,带大家了解了《为什么在使用缓冲区打印到标准输出时,ANSI转义代码无效?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>