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
DDDoriginal
2024-12-12 13:28:10326parcourir

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)
    }
}

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")

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")

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!

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