• [^] # Re: Une gestion d’erreur moderne ?

    Posté par (site web personnel) . En réponse à la dépêche À la découverte du langage V. Évalué à 6.

    Le type error est concrètement juste une chaîne de caractères

    Non, c'est une interface :

    type error interface {
     Error() string
    }

    Source : https://go.dev/doc/effective_go#errors

    En pratique, les erreurs sont souvent des chaînes de caractères, mais on peut trouver d'autres types d'erreurs. Par exemple, la bibliothèque standard a un type PathError dans io/fs défini ainsi :

    type PathError struct {
     Op string
     Path string
     Err error
    }

    Source : https://pkg.go.dev/io/fs#PathError

    sans module tiers tel que xerrors ou autre, impossible de déterminer le type de l'erreur

    De nos jours, on peut faire ça avec le module errors fourni avec la bibliothèque standard : https://pkg.go.dev/errors

    Au final, je préfère un type monadique, comme std::expected en C++ ou Result en Rust.

    Ici : [...] on est obligé de traiter l'erreur [...]

    Est-ce que faire un unwrap, ça compte vraiment comme traiter l'erreur ? Mon avis personnel est que ce n'est ni mieux ni pire que res, _ := foo(). Dans les deux cas, on ignore explicitement l'erreur sans la traiter.

    Perso, je trouve la gestion des erreurs en Go assez bof, mais pas atroce non plus.