Maison >développement back-end >Golang >En quoi les retours nommés et normaux dans Go diffèrent-ils dans la gestion des paniques ?
Dans Go, la différence entre les retours normaux et nommés se situe au-delà de la lisibilité. Les retours nommés permettent de modifier les valeurs de retour, affectant les résultats en cas de panique.
Considérez le code suivant :
import ( "fmt" "log" ) func catch(err *error) { if r := recover(); r != nil { *err = fmt.Errorf("recovered panic: %v", r) } } func panicIf42(n int) { if n == 42 { panic("42!") } } func NormalReturns(n int) error { var err error defer catch(&err) panicIf42(n) return err } func NamedReturns(n int) (err error) { defer catch(&err) panicIf42(n) return } func main() { err := NamedReturns(42) log.Printf("NamedReturns error: %v", err) err = NormalReturns(42) log.Printf("NormalReturns error: %v", err) }
De façon inattendue, NormalReturns renvoie zéro, tandis que NamedReturns renvoie une erreur. Comment expliquer ce comportement ?
Dans NormalReturns, la valeur de retour est initialisée à nil (la valeur zéro de l'erreur). Étant donné que la panique dans panicIf42() empêche l'atteinte de l'instruction return, la variable de résultat reste définie sur nil.
En revanche, NamedReturns déclare une variable de retour nommée err. En cas de panique, la fonction catch() différée modifie cette variable. La valeur de résultat nommée est conservée et renvoyée, même si l'instruction return n'est pas exécutée.
Les retours nommés offrent plus de flexibilité et de contrôle sur les valeurs de retour. Ils permettent la modification des valeurs de retour par des fonctions différées et garantissent que les valeurs spécifiées sont renvoyées même en cas de panique. En comprenant ces nuances, les développeurs peuvent utiliser efficacement les retours nommés pour gérer les cas exceptionnels et transmettre avec précision les conditions d'erreur.
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!