Maison > développement back-end > Golang > Pourquoi ma variable d'erreur Go Global reste-t-elle nulle après l'initialisation ?

Pourquoi ma variable d'erreur Go Global reste-t-elle nulle après l'initialisation ?

Susan Sarandon
Libérer: 2024-12-11 19:10:16
original
501 Les gens l'ont consulté

Why Does My Go Global Error Variable Remain Nil After Initialization?

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

Lors de la tentative d'initialisation globale d'une variable d'erreur, certains utilisateurs peuvent rencontrer un problème déroutant où la variable reste nulle dans les fonctions suivantes au sein le même package, ce qui entraîne un comportement inattendu du programme. Ce problème vient de la façon dont les variables globales sont initialisées dans Go.

Dans l'exemple suivant, l'objectif est d'initialiser une variable d'erreur globale loadErr et de rechercher des erreurs dans une autre fonction checkErr() :

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

Cependant, le problème se pose car checkErr() reçoit une valeur nulle pour loadErr. En effet, la variable créée dans main() ("loadErr := os.Open('asdasd')") est une variable locale dans main() et la variable globale n'est pas initialisée à ce stade.

Pour résoudre ce problème, il faut utiliser une simple affectation ("=") au lieu d'une déclaration et d'une initialisation ("":=") lors de l'attribution de la valeur à la variable globale :

// ...

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

En utilisant le "=" opérateur, la variable globale loadErr` se voit explicitement attribuer la valeur d'erreur, garantissant qu'elle est accessible aux autres fonctions du package.

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