Maison >développement back-end >Golang >Surveillance des tâches et gestion des erreurs : bonnes pratiques pour l'utilisation de Go WaitGroup dans Golang
Surveillance des tâches et gestion des erreurs : meilleures pratiques pour l'utilisation de Go WaitGroup dans Golang
Introduction :
Dans le langage Go, la surveillance des tâches et la gestion des erreurs peuvent être réalisées à l'aide de WaitGroup. WaitGroup est utilisé pour attendre la fin d'un groupe de tâches et peut contrôler efficacement le nombre de tâches exécutées simultanément. Cet article présentera les meilleures pratiques d'utilisation de WaitGroup dans Golang et fournira des exemples de code spécifiques.
package main import ( "fmt" "sync" ) func worker(id int, wg *sync.WaitGroup) { defer wg.Done() // 模拟任务的处理 fmt.Printf("Worker %d starting ", id) // 执行任务... fmt.Printf("Worker %d done ", id) } func main() { // 声明WaitGroup变量 var wg sync.WaitGroup for i := 1; i <= 5; i++ { wg.Add(1) // 增加任务数量 // 启动任务 go worker(i, &wg) } // 等待任务完成 wg.Wait() fmt.Println("All workers have finished") }
Dans le code ci-dessus, la fonction de travail simule le traitement d'un processus de tâche. Dans la fonction principale, nous déclarons d’abord une variable WaitGroup wg. Ensuite, utilisez wg.Add(1) pour augmenter le nombre de tâches avant de démarrer chaque tâche. Ensuite, lors du démarrage de chaque tâche, exécutez la fonction de travail simultanément via le mot-clé go et transmettez le WaitGroup à chaque tâche. Enfin, attendez la fin de toutes les tâches en appelant wg.Wait(). Lorsque toutes les tâches sont terminées, le programme affichera « Tous les travailleurs ont terminé ».
package main import ( "errors" "fmt" "sync" ) func worker(id int, wg *sync.WaitGroup) error { defer wg.Done() // 模拟任务的处理 fmt.Printf("Worker %d starting ", id) // 执行任务... // 如果任务出现错误,设置一个错误 err := errors.New("task failed") fmt.Printf("Worker %d done ", id) return err } func main() { var wg sync.WaitGroup for i := 1; i <= 5; i++ { wg.Add(1) go func(id int) { defer wg.Done() // 执行任务,并处理错误 if err := worker(id, &wg); err != nil { // 错误处理 fmt.Printf("Worker %d encountered an error: %v ", id, err) } }(i) } wg.Wait() fmt.Println("All workers have finished") }
Dans le code ci-dessus, la fonction de travail simule un processus de traitement de tâche pouvant contenir des erreurs. Dans la fonction principale, nous utilisons des fonctions anonymes pour démarrer chaque tâche et gérer les erreurs en passant la variable WaitGroup. Dans la fonction anonyme, nous appelons la fonction worker pour effectuer la tâche et obtenons la valeur de retour de la tâche via err := worker(id, &wg), qui est le type d'erreur. Si une erreur se produit lors de l'exécution de la tâche, nous pouvons gérer l'erreur en déterminant si err est nul.
Résumé :
Dans cet article, nous avons présenté les meilleures pratiques d'utilisation de WaitGroup dans Golang et fourni des exemples de code concrets. En utilisant WaitGroup, nous pouvons facilement mettre en œuvre la surveillance des tâches et la gestion des erreurs. Lorsque vous devez attendre la fin d'un groupe de tâches, l'utilisation de WaitGroup peut contrôler efficacement le nombre de tâches exécutées simultanément et gérer les erreurs possibles, améliorant ainsi la stabilité et la fiabilité du programme. J'espère que cet article pourra vous aider à utiliser WaitGroup pour gérer la surveillance des tâches et la gestion des erreurs dans Golang.
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!