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

Tutorial básico do Golang

Sentenças de controle do Golang

Funções & Métodos do Golang

Estruturas do Golang

Fatias & Arrays do Golang

Strings (String) do Golang

Ponteiros do Golang

Interfaces do Golang

Concorrência do Golang

Exceções (Error) do Golang

Outros itens do Golang

Panic do Linguagem Go

Panic é um mecanismo que usamos para lidar com situações de erro. Situações de emergência podem ser usadas para interromper a execução da função. Quando uma função chama panic, sua execução é interrompida e o fluxo de controle é transferido para as funções atrasadas relacionadas.

O chamador da função também será encerrado e as funções atrasadas do chamador também serão executadas (se houver). Este processo continua até o final do programa. Agora, relatar o estado de erro.

Este seqüência de terminação é chamada de panic, que pode ser controlada pela função built-in recover.}

Exemplo de panic1:

package main
import "os"
func main() {
	panic("Situação de erro")
	_ , err := os.Open("/tmp/file)
	if err != nil {
		panic(err)
	}
}

Saída:

panic: Situação de erro
goroutine 1 [running]:
main.main()
/Users/pro/GoglandProjects/Panic/exemplo de panic1.go:6 +0x39

Exemplo de panic2

package main
import "fmt"
func main() {
	fmt.Println("Chamando x a partir do main.")
	x()
	fmt.Println("Retornado de x.")
}
func x() {
	defer func() {
		if r := recover(); r != nil {
			fmt.Println("Recuperado em x", r)
		}
	}()
	fmt.Println("Executando x...")
	fmt.Println("Chamando y.")
	y(0)
	fmt.Println("Retornado normalmente de y.")
}
func y(i int) {
	fmt.Println("Executando y....")
	if i > 2 {
		fmt.Println("Panicking!")
		panic(fmt.Sprintf("%v", i))
	}
	defer fmt.Println("Atrasado em y", i)
	fmt.Println("Imprimindo em y", i)
	y(i + 1)
}

Saída:

Chamando x a partir do main.
Executando x...
Chamando y.
Executando y....
Imprimindo em y 0
Executando y....
Imprimindo em y 1
Executando y....
Imprimindo em y 2
Executando y....
Panicking!
Atrasado em y 2
Atrasado em y 1
Atrasado em y 0
Recuperado em x 3
Retornado de x.