Al inicializar una variable de error global, puede parecer sin cambios a las funciones dentro del mismo paquete. Esta discrepancia surge de un malentendido del alcance variable.
En su primer ejemplo, usa: = para inicializar tanto F como loaderr dentro de la función principal:
func main() { f, loadErr := os.Open("asdasd") if loadErr != nil { checkErr() } if f != nil { fmt.Println(f.Name()) } }
Esta línea crea una nueva variable local para F y Loaderr. No modifica las variables globales definidas fuera de la función. Por lo tanto, cuando llama a CheckErr (), Loaderr todavía es nulo porque no se ha establecido en ningún lugar dentro del alcance de la función principal.
en su segundo ejemplo, usa = para establecer el valor de Loaderr al error devuelto por Os.open ():
func main() { _, err := os.Open("asdasd") loadErr = err if loadErr != nil { checkErr() } }mediante el uso =, está asignando explícitamente el valor de la variable ERR local a la variable de carga global. Esto permite que la función checkerr () acceda a la variable global modificada y active el pánico.
evitando la sombra
var Loaderr Error func Main () { _, Loaderr = OS.open ("astasd") Si loaderr! = nil { checkerr () } Si f! = nil { fmt.println (f.name ()) } }
func main() { _, err := os.Open("asdasd") loadErr = err if loadErr != nil { checkErr() } }Esto garantiza que la variable de carga global sea accesible y actualizada en todo el programa.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3