ホームページ  >  記事  >  バックエンド開発  >  Goで実行されたプロセスの待機中/ビジーインジケーターを作成するにはどうすればよいですか?

Goで実行されたプロセスの待機中/ビジーインジケーターを作成するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-25 06:21:02358ブラウズ

How to Create a Waiting/Busy Indicator for Executed Processes in Go?

実行されたプロセスの待機/ビジー インジケーターの作成

exec.Command を使用して npm パッケージをインストールするなど、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
        }
    }
}

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。