実行されたプロセスの待機中/ビジー インジケーターの作成
提供された例のように、子プロセスを実行するときは、特に実行時間が長くなる可能性がある場合に、プロセスが実行中であることをユーザーに視覚的に知らせます。これは、ユーザーがプログラムがフリーズしたと考えるのを防ぐのに役立ちます。
待機/ビジー インジケーターを作成するには、ゴルーチンを利用してプロセスの実行中に定期的に何かを出力するという方法があります。プロセスが完了すると、シグナルを 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>
このコードはティッカーを使用してドットを表示します。
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 中国語 Web サイトの他の関連記事を参照してください。