Maison >développement back-end >Golang >En quoi les retours nommés et normaux dans Go diffèrent-ils dans la gestion des paniques ?

En quoi les retours nommés et normaux dans Go diffèrent-ils dans la gestion des paniques ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-20 11:50:10364parcourir

How Do Named and Normal Returns in Go Differ in Handling Panics?

Les retours nommés démasquent la panique dissimulée par les retours normaux

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.

Problème

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 ?

Explication

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.

Fonctionnalités de retour nommées

  • Les retours nommés permettent l'accès et la modification des valeurs de résultat dans les fonctions différées.
  • Si l'instruction return n'est pas atteinte en raison d'une panique, les valeurs de retour nommées peuvent toujours être mises à jour et renvoyées.
  • Ce comportement permet le retour de valeurs non nulles même en présence d'une panique. .

Conclusion

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!

Déclaration:
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