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 :
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.
[^] # Re: Une gestion d’erreur moderne ?
Posté par Bruno Michel (site web personnel) . En réponse à la dépêche À la découverte du langage V. Évalué à 6.
Non, c'est une interface :
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
PathErrordansio/fsdéfini ainsi :Source : https://pkg.go.dev/io/fs#PathError
De nos jours, on peut faire ça avec le module
errorsfourni avec la bibliothèque standard : https://pkg.go.dev/errorsEst-ce que faire un
unwrap, ça compte vraiment comme traiter l'erreur ? Mon avis personnel est que ce n'est ni mieux ni pire queres, _ := 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.