ビジー インジケーターによるプロセス実行の可視性の管理
Go で長時間の子プロセスを実行する場合、十分な情報を備えたユーザー エクスペリエンスが重要です。 「コマンドを実行しています。終了を待っています...」という単純なメッセージでは、ユーザーは進行中の操作について不安を感じる可能性があります。これに対処するために、ビジー インジケーターを使用してリアルタイムのフィードバックを提供できます。
ビジー インジケーターの実装
効果的なアプローチの 1 つは、別の 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 } } }</code>
このゴルーチンは、終了するシグナルが送信されるまでドットを出力し続けます。
プロセスとの統合実行
メインの実行ルーチンでは、ビジー インジケーターを開始し、子プロセスが完了するのを待つことができます。
<code class="go">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>
プロセスが完了すると、インジケーターのゴルーチンは次のようになります。
ユーザー エクスペリエンスの向上
ユーザー エクスペリエンスをさらに向上させるために、インジケーターをカスタマイズできます。たとえば、特定の数のドットの後に新しい行を印刷できます。
<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 サイトの他の関連記事を参照してください。