Création d'un indicateur d'attente/occupé pour le processus exécuté
Lors de l'exécution de processus enfants dans Go, tels que l'installation de packages npm à l'aide de exec.Command, il peut prendre un certain temps avant que la sortie soit visible. Pour améliorer l'expérience utilisateur, pensez à afficher un indicateur d'occupation pour indiquer que le processus est en cours.
Solution :
Une solution efficace consiste à utiliser une goroutine distincte pour périodiquement imprimer des caractères, tels que des points, sur la console pendant l'exécution du processus. Une fois le processus terminé, la goroutine de l'indicateur peut être terminée.
<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>
Pour un indicateur plus attrayant visuellement, vous pouvez modifier la fonction de l'indicateur pour imprimer une nouvelle ligne après un nombre spécifique de points, tel que 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>
En mettant en œuvre cette solution, vous pouvez fournir un signal visuel aux utilisateurs indiquant qu'un processus est en cours d'exécution, améliorant ainsi l'expérience utilisateur et rendant l'application plus réactive.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!