実行中のプロセスの待機/ビジー インジケーターの作成
「npm install」などの子プロセスを実行する場合、処理にかなりの時間がかかることがあります。パッケージを完了してダウンロードするプロセス。この間、プロセスが進行中であることを示すフィードバックをユーザーに提供することが重要です。
ビジー インジケーターの実装
ビジー インジケーターを作成するには、次のことができます。子プロセスと同時に実行される別の 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...") shutdownCh := make(chan struct{}) // Channel to signal goroutine termination go indicator(shutdownCh) err := cmd.Run() close(shutdownCh) // Signal indicator goroutine to terminate fmt.Println() log.Printf("Command finished with error: %v", err) }</code>
インジケーターのカスタマイズ
特定の行の後に新しい行を出力するようにインジケーターを変更できます。インジケーター関数の修正バージョンを使用したドットの数:
<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 中国語 Web サイトの他の関連記事を参照してください。