Panic

Panic #

// Um `panic` tipicamente significa que acontenceu algum
// erro inesperado. Geralmente é utilizado para falhar
// rapidamente em erros que não deviam ocorrer durante
// uma operação normal, ou que não está sendo tratado
// de maneira _graciosa_ ou apropriada.

package main

import "os"

func main() {

	// O panic será utilizado por todo o site para checar por
	// erros inesperados. Este é o único código em todo o site
	// especificamente desenhado para causar um panic.
	panic("uhhh... Houston, we have a problem.")

	// Um uso comum do panic é para abortar a execução
	// de determinado código se uma função retorna um
	// erro que não é tratado. Aqui está um exemplo
	// simulado de `panic` ao receber um erro inesperado
	// ao se criar um novo arquivo.
	_, err := os.Create("/tmp/file")
	if err != nil {
		panic(err)
	}
}
# Ao executar este código ocorrerá um panic e será
# exibido no console uma mensagem de erro, um 
# "rastro" de execução da goroutine, e saída, 
# ou exit, com código diferente de zero.

# Quando o primeiro panic na função main dispara, 
# o código é interrompido, sem continuar até o 
# final da execução. Para visualizar o que ocorre
# no segundo panic deste exemplo, é necessário
# comentar o primeiro panic.
$ go run panic.go
panic: uhhh... Houston, we have a problem.

goroutine 1 [running]:
main.main()
	/.../panic.go:16 +0x27
exit status 2


# Note que, diferentemente de outras linguagens que 
# usam exceções para tratar erros, em Go é idiomático
# usar retornos indicativos de erro sempre que possível.