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!