Maison > développement back-end > Golang > le corps du texte

Comment créer un indicateur d'attente/occupé pour les processus exécutés dans Go ?

Mary-Kate Olsen
Libérer: 2024-10-25 06:21:02
original
374 Les gens l'ont consulté

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

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!