Maison > développement back-end > Golang > Pourquoi ma variable d'erreur globale ne panique-t-elle pas après l'initialisation dans Go ?

Pourquoi ma variable d'erreur globale ne panique-t-elle pas après l'initialisation dans Go ?

Susan Sarandon
Libérer: 2024-12-11 13:51:12
original
178 Les gens l'ont consulté

Why Doesn't My Global Error Variable Panic After Initialization in Go?

Pourquoi la variable d'erreur globale ne panique-t-elle pas après l'initialisation ?

Lors de l'initialisation d'une variable d'erreur globale, elle peut apparaître inchangée pour les fonctions du même package. Cet écart résulte d'une mauvaise compréhension de la portée des variables.

Portée et initialisation

Dans votre premier exemple, vous utilisez := pour initialiser à la fois f et loadErr dans la fonction principale :

func main() {
    f, loadErr := os.Open("asdasd")
    if loadErr != nil {
        checkErr()
    }
    if f != nil {
        fmt.Println(f.Name())
    }
}
Copier après la connexion

Cette ligne crée une nouvelle variable locale pour f et loadErr. Il ne modifie pas les variables globales définies en dehors de la fonction. Ainsi, lorsque vous appelez checkErr(), loadErr est toujours nul car il n'a été défini nulle part dans le cadre de la fonction principale.

Définition de la variable globale

Dans votre deuxième exemple, vous utilisez = pour définir la valeur de loadErr sur l'erreur renvoyée par os.Open() :

func main() {
    _, err := os.Open("asdasd")
    loadErr = err
    if loadErr != nil {
        checkErr()
    }
}
Copier après la connexion

En utilisant =, vous attribuez explicitement la valeur de la variable err locale à la variable globale loadErr. Cela permet à la fonction checkErr() d'accéder à la variable globale modifiée et de déclencher la panique.

Éviter l'observation

Pour éviter de créer par inadvertance des variables locales qui masquent les variables globales, il est important de déclarer les variables globales explicitement avant d'attribuer une valeur. Dans le premier exemple, vous pouvez déclarer loadErr comme variable globale en dehors de la fonction principale en déplaçant sa définition :

var loadErr error

func main() {
    _, loadErr = os.Open("asdasd")
    if loadErr != nil {
        checkErr()
    }
    if f != nil {
        fmt.Println(f.Name())
    }
}
Copier après la connexion

Cela garantit que la variable globale loadErr est accessible et mise à jour tout au long du programme.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal