Maison > Article > développement back-end > Stratégies de gestion des erreurs et de récupération dans la programmation simultanée Go
Il existe deux méthodes de gestion des erreurs en programmation simultanée : la gestion active des erreurs (propagation des erreurs) et la gestion passive des erreurs (pipeline d'erreurs). Il existe deux stratégies de récupération : récupération (catch panique) et nouvelle tentative (exécutions multiples). Des cas pratiques démontrent l’utilisation de ces quatre méthodes.
Dans la programmation simultanée Go, la gestion des erreurs est cruciale. Il existe deux manières principales de gérer les erreurs :
En plus de la gestion des erreurs, il existe également des stratégies de récupération en programmation simultanée. Les stratégies de récupération sont des actions prises lorsqu'une fonction ne s'exécute pas correctement en raison d'une erreur. Il existe deux stratégies de récupération courantes :
recover
intégrée. func CalculateAverage(numbers []int) (float64, error) { if len(numbers) == 0 { return 0, errors.New("empty slice") } sum := 0 for _, number := range numbers { sum += number } return float64(sum) / float64(len(numbers)), nil } func main() { numbers := []int{1, 2, 3, 4, 5} average, err := CalculateAverage(numbers) if err != nil { fmt.Println(err) return } fmt.Println(average) }
type ErrorChannel chan error func CalculateAverageWithChannel(numbers []int) ErrorChannel { ch := make(ErrorChannel) go func() { if len(numbers) == 0 { ch <- errors.New("empty slice") return } sum := 0 for _, number := range numbers { sum += number } ch <- nil close(ch) }() return ch } func main() { numbers := []int{1, 2, 3, 4, 5} ch := CalculateAverageWithChannel(numbers) for err := range ch { if err != nil { fmt.Println(err) return } fmt.Println("Average calculated successfully") } }
func CalculateAverageWithRecovery(numbers []int) float64 { defer func() { if r := recover(); r != nil { fmt.Println("Error occurred:", r) } }() if len(numbers) == 0 { panic("empty slice") } sum := 0 for _, number := range numbers { sum += number } return float64(sum) / float64(len(numbers)) } func main() { numbers := []int{1, 2, 3, 4, 5} average := CalculateAverageWithRecovery(numbers) fmt.Println(average) }
func CalculateAverageWithRetry(numbers []int) (float64, error) { var err error = errors.New("empty slice") maxRetries := 3 for i := 0; i < maxRetries; i++ { if len(numbers) == 0 { err = errors.New("empty slice") continue } sum := 0 for _, number := range numbers { sum += number } return float64(sum) / float64(len(numbers)), nil } return 0, err } func main() { numbers := []int{1, 2, 3, 4, 5} average, err := CalculateAverageWithRetry(numbers) if err != nil { fmt.Println(err) } else { fmt.Println(average) } }
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!