亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Linux/macOS 終端中從 Go 程序打印并使用回車時清除其余行

在 Linux/macOS 終端中從 Go 程序打印并使用回車時清除其余行

Go
墨色風雨 2022-06-13 16:19:39
如果我像這樣在 Go 中創建一個循環:package mainimport (    "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 secondss,Time out in 8 secondss,等。有沒有一種簡單的方法可以在打印下一行之前從上一次迭代中清除打印的行?
查看完整描述

1 回答

?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

要指定整數的寬度,請%在動詞后面使用數字。默認情況下,結果將右對齊并用空格填充。


使用%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)

    }

}


去游樂場

更新:


你也可以printf '\33c\e[3J'從你的 go 代碼中執行命令來清理終端。


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()

    }

}


查看完整回答
反對 回復 2022-06-13
  • 1 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號