為執行進程建立等待/忙碌指示器
在Go 中執行子進程時,例如使用exec.Command 安裝npm 套件時,它可能需要很長時間才能看到輸出。為了增強用戶體驗,請考慮顯示一個忙碌指示器來指示過程正在進行中。
解決方案:
一個有效的解決方案包括使用單獨的 goroutine 定期當進程運行時,將字元(例如點)列印到控制台。當過程完成時,指示器 goroutine 可以終止。
<code class="go">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>
為了獲得更具視覺吸引力的指示器,您可以修改指示器函數以在特定數量的點後列印換行符,例如5:
<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中文網其他相關文章!