= -6ren">
gpt4 book ai didi

go - 在Linux/macOS终端中从Go程序打印并使用回车符时,清除其余行

转载 作者:行者123 更新时间:2023-12-01 22:12:28 27 4
gpt4 key购买 nike

如果我在Go中创建一个循环,像这样:

package main

import (
"fmt"
"time"
)

func main() {
for i := 10; i >= 0; i-- {
fmt.Printf("Time out in %d seconds\r", i)
time.Sleep(1 * time.Second)
}
}
并在Linux或macOS终端上运行该程序,我将看到在第一次迭代中正确打印了该行( Time out in 10 seconds),但是在下一个迭代中(在此情况下,以及其他情况下),由于要打印的字符串短了一个字符,因此我将看到将最后一次迭代的剩余部分作为结尾处的附加 s字符- Time out in 9 secondssTime out in 8 secondss等。
有没有一种简单的方法可以在打印下一行之前清除上一个迭代中的打印行?

最佳答案

要指定整数的宽度,请在动词中的%之后使用数字。默认情况下,结果将右对齐并用空格填充。

使用%2d而不是%d。它将解决您的问题。

package main

import (
"fmt"
"time"
)

func main() {
for i := 10; i >= 0; i-- {
fmt.Printf("Time out in %2d seconds\r", i)
time.Sleep(1 * time.Second)
}
}

  • Go Playground

  • 更新:
    您还可以从go代码中执行 printf '\33c\e[3J'命令来清理终端。
    package main

    import (
    "fmt"
    "os"
    "os/exec"
    "time"
    )

    var clearScreen = func() {
    cmd := exec.Command(`printf '\33c\e[3J'`) // clears the scrollback buffer as well as the screen.
    cmd.Stdout = os.Stdout
    cmd.Run()
    }

    func main() {
    for i := 10; i >= 0; i-- {
    fmt.Printf("Time out in %2d seconds\r", i)
    time.Sleep(1 * time.Second)
    clearScreen()
    }
    }

    关于go - 在Linux/macOS终端中从Go程序打印并使用回车符时,清除其余行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62705272/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com