English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Panic è un meccanismo che utilizziamo per gestire situazioni di errore. Le emergenze possono essere utilizzate per interrompere l'esecuzione di una funzione. Quando una funzione chiama panic, la sua esecuzione si ferma e il flusso di controllo passa alla funzione ritardata pertinente.
Il chiamante della funzione sarà anche terminato, e le funzioni ritardate chiamate dal chiamante verranno eseguite (se presenti). Questo processo continuerà fino alla fine del programma. Ora si segnala la situazione di errore.
Questa sequenza di terminazione si chiama panic e può essere controllata dalla funzione built-in recover.
package main import "os" func main() { panic("Situazione di errore") _, err := os.Open("/tmp/file") if err != nil { panic(err) } }
Output:
panic: Situazione di errore goroutine 1 [running]: main.main() /Users/pro/GoglandProjects/Panic/panic example1.go:6 +0x39
package main import "fmt" func main() { fmt.Println("Chiamando x da main.") x() fmt.Println("Ritornato da x.") } func x() { defer func() { if r := recover(); r != nil { fmt.Println("Recuperato in x", r) } }() fmt.Println("Eseguendo x...") fmt.Println("Chiamando y.") y(0) fmt.Println("Ritornato normalmente da y.") } func y(i int) { fmt.Println("Eseguendo y....") if i > 2 { fmt.Println("Panico!") panic(fmt.Sprintf("%v", i)) } defer fmt.Println("Ritardato in y", i) fmt.Println("Stampando in y", i) y(i + 1) }
Output:
Chiamando x da main. Eseguendo x... Chiamando y. Eseguendo y.... Stampando in y 0 Eseguendo y.... Stampando in y 1 Eseguendo y.... Stampando in y 2 Eseguendo y.... Panico! Ritardato in y 2 Ritardato in y 1 Ritardato in y 0 Recuperato in x 3 Restituito da x.