Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erstelle ich einen Warte-/Beschäftigt-Indikator für ausgeführte Prozesse in Go?

Wie erstelle ich einen Warte-/Beschäftigt-Indikator für ausgeführte Prozesse in Go?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-25 06:21:02358Durchsuche

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

Erstellen eines Warte-/Beschäftigt-Indikators für ausgeführten Prozess

Bei der Ausführung untergeordneter Prozesse in Go, wie z. B. der Installation von npm-Paketen mit exec.Command, wird es Es kann eine beträchtliche Zeit dauern, bis die Ausgabe sichtbar ist. Um das Benutzererlebnis zu verbessern, sollten Sie erwägen, eine Beschäftigt-Anzeige anzuzeigen, um anzuzeigen, dass der Prozess ausgeführt wird.

Lösung:

Eine effektive Lösung besteht darin, regelmäßig eine separate Goroutine zu verwenden Geben Sie Zeichen, z. B. Punkte, während der Ausführung des Prozesses an die Konsole aus. Wenn der Vorgang abgeschlossen ist, kann die Indikator-Goroutine beendet werden.

<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>

Für einen optisch ansprechenderen Indikator können Sie die Indikatorfunktion so ändern, dass nach einer bestimmten Anzahl von Punkten, z. B. 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>
Durch die Implementierung dieser Lösung können Sie Benutzern einen visuellen Hinweis geben, der darauf hinweist, dass ein Prozess ausgeführt wird, wodurch das Benutzererlebnis verbessert und die Anwendung reaktionsfähiger wird.

Das obige ist der detaillierte Inhalt vonWie erstelle ich einen Warte-/Beschäftigt-Indikator für ausgeführte Prozesse in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn