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!