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