Le Go par l'exemple: Panic

Un panic signifie typiquement que quelque chose s’est mal passé et de manière inattendue. On l’utilise principalement pour faire échouer rapidement des erreurs qui ne devraient normalement pas arriver, ou que nous ne pouvons pas traiter.

package main
import "os"

Nous allons utilise panic dans les exemples de ce site pour traiter les cas imprévus. Ce programme-ci est le seul du site qui va paniquer durant son déroulement normal.

func main() {
    panic("a problem")

Une utilisation courante de panic, c’est d’abandonner si une fonction renvoie une valeur d’erreur que nous ne savons (ou ne voulons) pas traiter. Voici un exemple de panique si on a une erreur inattendue lors de la création d’un nouveau fichier.

    _, err := os.Create("/tmp/file")
    if err != nil {
        panic(err)
    }
}

Exécuter ce programme va amener à une panique, qui affiche un message d’erreur et une trace d’exécution, et qui le programme en renvoyant une valeur de status non nulle.

$ go run panic.go
panic: a problem
goroutine 1 [running]:
main.main()
	/.../panic.go:12 +0x47
...
exit status 2

A noter que contrairement à certains langages qui utilisent des exceptions pour la gestion de nombreuses erreurs, en Go il est idiomatique d’utiliser des valeurs de retour qui indique le status d’erreur dès que possible.

Exemple suivant: Defer.