Pourquoi un retour normal peut-il cacher une panique qu'un retour nommé fournit correctement à l'appelant ?
En Go, l'instruction return initialise tout paramètres de résultat à leurs valeurs zéro avant d’exécuter les fonctions différées. S'il existe des paramètres de résultat nommés et que l'instruction return n'est pas atteinte, ces paramètres nommés conserveront la valeur zéro.
Ce comportement est démontré dans l'exemple fourni :
func NormalReturns(n int) error { var err error defer catch(&err) panicIf42(n) return err }
Ici, le La variable err est initialisée à zéro, mais comme l'instruction return n'est pas atteinte en raison d'une panique, elle reste nulle. Même si defer catch() modifie err, ce changement n'est pas reflété dans la valeur renvoyée car l'instruction return spécifie une liste d'expressions vide.
En revanche, les retours nommés permettent aux fonctions différées de modifier les valeurs de retour après le retour déclaration et avant de retourner à l'appelant. Ceci est illustré dans la fonction suivante :
func NamedReturns(n int) (err error) { defer catch(&err) panicIf42(n) return }
Dans ce cas, err est initialisé à nil, mais le catch() différé est capable de le modifier avant le retour de la fonction. En conséquence, toute valeur non nulle attribuée à err sera renvoyée à l'appelant.
Ce comportement met en évidence la principale différence entre les retours nommés et normaux. Avec les retours nommés, les fonctions différées peuvent modifier les valeurs de retour, offrant ainsi un moyen de garantir que les informations pertinentes sont propagées à l'appelant, même en cas de panique.
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!