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

Wie erstelle ich in Go einen Warte-/Beschäftigt-Indikator für Prozesse mit langer Laufzeit?

Linda Hamilton
Linda HamiltonOriginal
2024-10-25 02:37:30377Durchsuche

How to Create a Waiting/Busy Indicator for Long-Running Processes in Go?

Erstellen einer Warte-/Beschäftigt-Anzeige für laufende Prozesse

Die Ausführung eines untergeordneten Prozesses wie „npm install“ kann viel Zeit in Anspruch nehmen Der Prozess zum Vervollständigen und Herunterladen von Paketen. Während dieser Zeit ist es wichtig, dem Benutzer Feedback zu geben, um anzuzeigen, dass der Prozess läuft.

Implementieren eines Besetztindikators

Um einen Besetztindikator zu erstellen, können wir Nutzen Sie eine andere Goroutine, die gleichzeitig mit dem untergeordneten Prozess ausgeführt wird. Diese Goroutine gibt regelmäßig ein Zeichen (z. B. einen Punkt) auf der Konsole aus, um die Aktivität anzuzeigen. Wenn der untergeordnete Prozess abgeschlossen ist, signalisieren wir der Goroutine, dass sie beendet wird.

<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...")

    shutdownCh := make(chan struct{}) // Channel to signal goroutine termination
    go indicator(shutdownCh)

    err := cmd.Run()

    close(shutdownCh) // Signal indicator goroutine to terminate

    fmt.Println()
    log.Printf("Command finished with error: %v", err)
}</code>

Anpassen des Indikators

Sie können den Indikator so ändern, dass nach einer bestimmten Zeit eine neue Zeile gedruckt wird Anzahl der Punkte mithilfe einer modifizierten Version der Indikatorfunktion:

<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 Bereitstellung dieses visuellen Feedbacks können Sie Benutzer darüber informieren, dass der Prozess noch läuft, und Verwirrung oder Zeitüberschreitungen aufgrund der Wahrnehmung von Inaktivität verhindern.

Das obige ist der detaillierte Inhalt vonWie erstelle ich in Go einen Warte-/Beschäftigt-Indikator für Prozesse mit langer Laufzeit?. 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