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.
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()) } }
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.
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() } }
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.
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()) } }
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!