Go Em Exemplos: 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.

Próximo exemplo: Defer.