English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial di base di Golang

Istruzioni di controllo di Golang

Funzione & Metodo di Golang

Struttura di Golang

Tagli & Array di Golang

Stringa (String) di Golang

Puntatore di Golang

Interfaccia di Golang

Concordanza di Golang

Eccezioni (Error) di Golang

Altri argomenti di Golang

Panic del linguaggio Go

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.

Esempio di panic 1:

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

Esempio di panic 2

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.