Maison > développement back-end > Golang > Pourquoi ma variable d'erreur globalement initialisée reste-t-elle nulle dans une autre fonction ?

Pourquoi ma variable d'erreur globalement initialisée reste-t-elle nulle dans une autre fonction ?

DDD
Libérer: 2024-12-12 13:28:10
original
324 Les gens l'ont consulté

Why Does My Globally Initialized Error Variable Remain Nil in Another Function?

La variable d'erreur globale reste nulle après l'initialisation

Problème

Lors de l'initialisation globale d'une variable d'erreur , il reste nul dans une autre fonction au sein du même package. Cela peut empêcher le déclenchement des conditions de panique comme prévu.

package main

import (
    "os"
    "fmt"
)

var loadErr error

func main() {
    f, loadErr := os.Open("asdasd")
    if loadErr != nil {
        checkErr()
    }
    if f != nil {
        fmt.Println(f.Name())
    }
}

// panic won't be called because loadErr is nil
func checkErr() {
    if loadErr != nil {
        panic(loadErr)
    }
}
Copier après la connexion

Réponse

Le problème se pose car la variable loadErr dans la fonction principale est une nouvelle variable locale . La variable globale ne reçoit jamais de valeur. Pour remédier à cela, l'affectation des variables doit être simplifiée :

func main() {
    _, loadErr = os.Open("asdasd")
Copier après la connexion

En utilisant =, la variable globale loadErr sera initialisée et les erreurs ultérieures seront propagées correctement.

Considérations supplémentaires

Si vous souhaitez conserver la valeur de retour de os.Open, vous devez prédéclarer la seconde variable :

var f *os.File
f, loadErr = os.Open("asdasd")
Copier après la connexion

Dans ce cas, := ne peut pas être utilisé car cela créerait une variable locale et ignorerait la variable globale.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal