為執行的程序建立等待/忙碌指示器
執行子程序時,如提供的範例所示,提供向使用者提供視覺回饋,表明進程正在運行,特別是當執行時間可能很長時。這可以幫助防止用戶認為程式已凍結。
要建立等待/忙碌指示器,一種方法是利用 goroutine 在進程執行時定期列印某些內容。當進程完成時,可以向 goroutine 發送一個訊號來終止它。
這裡有一個程式碼範例示範了這種方法:
<code class="go">package main import ( "fmt" "log" "os/exec" "time" ) func indicator(shutdownCh <-chan struct{}) { ticker := time.NewTicker(time.Second) defer ticker.Stop() for { select { case <-ticker.C: fmt.Print(".") case <-shutdownCh: return } } } func main() { cmd := exec.Command("npm", "install") log.Printf("Running command and waiting for it to finish...") // Start indicator: shutdownCh := make(chan struct{}) go indicator(shutdownCh) err := cmd.Run() close(shutdownCh) // Signal indicator() to terminate fmt.Println() log.Printf("Command finished with error: %v", err) }</code>
此程式碼使用一個程式碼來列印一個點每秒和一個關閉通道,用於在行程完成時向指示器goroutine 發出終止訊號。
要在每五個點後開始一個新行,請修改指示器函數,如下所示:
<code class="go">func indicator(shutdownCh <-chan struct{}) { ticker := time.NewTicker(time.Second) defer ticker.Stop() for i := 0; ; { select { case <-ticker.C: fmt.Print(".") if i++; i%5 == 0 { fmt.Println() } case <-shutdownCh: return } } }</code>
透過實現此類指示器,您可以向使用者提供清晰的視覺回饋,表明進程正在運行並且尚未凍結。
以上是如何在 Go 中為長時間運行的進程創建一個視覺上吸引人的等待/忙碌指示器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!