Je recommande de lire sur l'article The Go Blog Error Handling and Go et Effective Go sur les erreurs, qui jettent un coup d'oeil à la puissance du type d'erreur de Go.
En général, les paniques peuvent être utilisées dans une bibliothèque/un paquet, mais elles ne doivent pas se propager à l'extérieur du paquet à moins d'une erreur fatale. En d'autres termes, les développeurs ne devraient jamais avoir à écrire du code qui attend des paniques de votre bibliothèque.
Vous pouvez utiliser des paniques internes si la gestion de la propagation des erreurs est fastidieuse. Dans ce cas, vous pouvez envelopper vos fonctions publiques avec un defer/récupérer gestionnaire qui passe l'erreur
func Function() (err error) {
defer func() {
if r := recover(); r != nil {
err = r.(error)
}
}()
// Do stuff
panic(errors.New("Error Message"))
}
Cet échantillon est adapté à partir du package json
de la bibliothèque standard, où les paniques internes sont utilisés pour nettoyer erreur imbriquée complexe manipulation.
Comme tout "ça dépend." Si vous le lancez vous-même, cela devrait être une exception qui peut être détectée, pas une erreur. Dans tous les cas, le comportement doit être documenté. L'exception capturable par rapport à l'erreur renvoyée dépend du langage, des autres bibliothèques et de l'audience. –
J'ai ajouté la langue que j'utilise comme une balise, mais comme Golang est fanatique de 'if err! = Nil' je pensais peut-être juste renvoyer un' error.New() '? – duck
Vous ne paniquez jamais dans les bibliothèques. – zerkms