Go で長時間実行プロセスの視覚的に魅力的な待機/ビジー インジケーターを作成するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-24 18:59:02
オリジナル
870 人が閲覧しました

How can I create a visually appealing waiting/busy indicator for long-running processes in Go?

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

提供された例のように、子プロセスを実行するときは、特に実行時間が長くなる可能性がある場合に、プロセスが実行中であることをユーザーに視覚的に知らせます。これは、ユーザーがプログラムがフリーズしたと考えるのを防ぐのに役立ちます。

待機/ビジー インジケーターを作成するには、ゴルーチンを利用してプロセスの実行中に定期的に何かを出力するという方法があります。プロセスが完了すると、シグナルを 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート