En lenguaje Go, panic es como una excepción, también surge en tiempo de ejecución. O, en otras palabras, pánico significa que surge una condición inesperada en su programa Go debido a la cual se termina la ejecución de su programa. A veces, el pánico ocurre en tiempo de ejecución cuando surge alguna situación específica, como accesos a arrays fuera de los límites, etc., como se muestra en el Ejemplo 1 o, a veces, el programador lo lanza deliberadamente para manejar el peor de los casos en el programa Go con la ayuda de panic() como se muestra en el Ejemplo 2.
La función panic es una función incorporada que se define en el paquete incorporado del lenguaje Go. Esta función termina el flujo de control y comienza a entrar en pánico.
Sintaxis:
func panic(v interface{})
Puede recibir cualquier tipo de argumento. Cuando ocurre el pánico en el programa Go, el programa finaliza en tiempo de ejecución y en la pantalla de salida se muestra un mensaje de error, así como el seguimiento de la pila hasta el punto donde ocurrió el pánico. Generalmente, en el lenguaje Go cuando ocurre el pánico en el programa, el programa no termina inmediatamente, termina cuando el go completa todo el trabajo pendiente de ese programa.
Por ejemplo, supongamos que una función A llama al pánico, luego se detiene la ejecución de la función A y si hay funciones diferidas disponibles en A, entonces se ejecutan normalmente después de eso, la función A regresa a su llamador y el llamador A se comporta como una llamada entrar en pánico Este proceso continúa hasta que se devuelven todas las funciones en la goroutine actual, después de eso, el programa falla como se muestra en el ejemplo 3.
Ejemplo 1:
// Simple Go program which illustrates // the concept of panic package main import "fmt" // Main function func main() { // Creating an array of string type // Using var keyword var myarr [3]string // Elements are assigned // using an index myarr[0] = "GFG" myarr[1] = "GeeksforGeeks" myarr[2] = "Geek" // Accessing the elements // of the array // Using index value fmt.Println("Elements of Array:") fmt.Println("Element 1: ", myarr[0]) // Program panics because // the size of the array is // 3 and we try to access // index 5 which is not // available in the current array, // So, it gives an runtime error fmt.Println("Element 2: ", myarr[5]) }
Producción:
./prog.go:32:34: invalid array index 5 (out of bounds for 3-element array)
Ejemplo 2:
// Go program which illustrates // how to create your own panic // Using panic function package main import "fmt" // Function func entry(lang *string, aname *string) { // When the value of lang // is nil it will panic if lang == nil { panic("Error: Language cannot be nil") } // When the value of aname // is nil it will panic if aname == nil { panic("Error: Author name cannot be nil") } // When the values of the lang and aname // are non-nil values it will print // normal output fmt.Printf("Author Language: %s \n Author Name: %s\n", *lang, *aname) } // Main function func main() { A_lang := "GO Language" // Here in entry function, we pass // a non-nil and nil values // Due to nil value this method panics entry(&A_lang, nil) }
Producción:
panic: Error: Author name cannot be nil goroutine 1 [running]: main.entry(0x41a788, 0x0) /tmp/sandbox108627012/prog.go:20 +0x140 main.main() /tmp/sandbox108627012/prog.go:37 +0x40
Ejemplo 3:
// Go program which illustrates the // concept of Defer while panicking package main import ( "fmt" ) // Function func entry(lang *string, aname *string) { // Defer statement defer fmt.Println("Defer statement in the entry function") // When the value of lang // is nil it will panic if lang == nil { panic("Error: Language cannot be nil") } // When the value of aname // is nil it will panic if aname == nil { panic("Error: Author name cannot be nil") } // When the values of the lang and aname // are non-nil values it will // print normal output fmt.Printf("Author Language: %s \n Author Name: %s\n", *lang, *aname) } // Main function func main() { A_lang := "GO Language" // Defer statement defer fmt.Println("Defer statement in the Main function") // Here in entry function, we pass // one non-nil and one-nil value // Due to nil value this method panics entry(&A_lang, nil) }
Producción:
Defer statement in the entry function Defer statement in the Main function panic: Error: Author name cannot be nil goroutine 1 [running]: main.entry(0x41a780, 0x0) /tmp/sandbox121565297/prog.go:24 +0x220 main.main() /tmp/sandbox121565297/prog.go:44 +0xa0
Nota: La declaración o función diferida siempre se ejecuta incluso si el programa entra en pánico.
Uso de pánico:
- Puede usar panic para un error irrecuperable en el que el programa no puede continuar con su ejecución.
- También puede usar pánico si desea un error para una condición específica en su programa.
Publicación traducida automáticamente
Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA