登录
首页 >  Golang >  Go问答

避免重复输出,如何更新控制台状态行?

来源:stackoverflow

时间:2024-02-05 21:28:00 472浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《避免重复输出,如何更新控制台状态行?》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我有一个应用程序,可以处理大量作业并偶尔使用 fmt.println() 进行输出。

目前,它在每个作业完成后输出 job x/total。例如:

some output
again output
job 5/300
another output
job 6/300

问题是这是重复的,而我试图让 job 线保持固定。

我想输出一种可以更新但不重复的状态行。例如

Some output
More output <-- these can repeat from Println()
Job 23/200 <-- this should remain fixed but be updatable

我见过这个问题,但它是针对 c# 的

这在 go 中可能吗?


正确答案


您可以使用 ansi 转义码 (https://en.wikipedia.org/wiki/ANSI_escape_code) 不断更新消息。

例如:

func main() {
    const total = 5
    completed := 0
    saveCursorPosition := "\033[s"
    clearLine := "\033[u\033[K"

    go func() {
        jobTicker := time.NewTicker(time.Second)
        for {
            <-jobTicker.C
            completedJobs++
        }
    }()

    ticker := time.NewTicker(time.Second / 2)
    fmt.Print(saveCursorPosition)
    for {
        if completed == total {
            fmt.Println("\nAll jobs were completed")
            break
        }
        <-ticker.C
        fmt.Print(clearLine)
        fmt.Printf("Job %d/%d", completed, total)
    }
}

但由于它总是返回到相同的光标位置,因此其他打印将覆盖 job x/y 消息。

而且您无法更改光标位置,然后返回到较旧的位置,因此每次作业完成时都必须打印作业日志和其他输出。

今天关于《避免重复输出,如何更新控制台状态行?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

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