Voici mon point de vue sur la réduction de la gestion des erreurs sur Go, un exemple est pour obtenir des paramètres d'URL HTTP:
(Modèle de conception dérivé de https://blog.golang.org/errors-are-values )
type HTTPAdapter struct {
Error *common.AppError
}
func (adapter *HTTPAdapter) ReadUUID(r *http.Request, param string, possibleError int) uuid.UUID {
requestUUID := uuid.Parse(mux.Vars(r)[param])
if requestUUID == nil {
adapter.Error = common.NewAppError(fmt.Errorf("parameter %v is not valid", param),
possibleError, http.StatusBadRequest)
}
return requestUUID
}
l'appeler pour plusieurs paramètres possibles serait comme ci-dessous:
adapter := &httphelper.HTTPAdapter{}
viewingID := adapter.ReadUUID(r, "viewingID", common.ErrorWhenReadingViewingID)
messageID := adapter.ReadUUID(r, "messageID", common.ErrorWhenReadingMessadeID)
if adapter.Error != nil {
return nil, adapter.Error
}
Ce n'est pas une solution miracle, l'inconvénient est que si vous avez eu plusieurs erreurs, vous ne pouvez obtenir que la dernière erreur.
Mais dans ce cas, il est relativement répétitif et à faible risque, je peux donc simplement obtenir la dernière erreur possible.