< Programmation en Go

Panic

Lorsqu'une erreur survient dans un appel de fonction, le meilleur comportement est en général de signaler l'erreur par un code retour. Mais parfois une erreur est irréversible et doit entraîner l'arrêt du programme. Dans ce cas, il convient d'appeler la fonction panic(). Cette fonction prend un seul argument de type quelconque.

Exemple:

 var user = os.Getenv("USER")
 
 func init() {
    if user == "" {
        // le programme se termine abruptement
        panic("pas de valeur pour $USER")
    }
 }

Recover

Cette fonction permet de récupérer une exception lancée par "panic". Elle s'utilise en général avec defer:

 func serveur(canal <-chan *Tache) {
    for tache := range canal {
        go faitEnSecurite(tache)
    }
 }
 
 func faitEnSecurite(tache *Tache) {
    defer func() {
        if err := recover(); err != nil {
            log.Println("tache echouee:", err)
        }
    }()
    faire(tache)
 }

Ici, la fonction "faitEnSecurite" applique au résultat de "faire()" la fonction déclarée avec defer, qui appelle recover() et vérifie si une erreur a eu lieu. L'exception est à ce moment totalement levée et il n'y a rien d'autre à faire pour continuer l'exécution normale du programme.

Cet article est issu de Wikibooks. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.