Je suis d'accord avec jnml la réponse qu'ils sont à la fois idiomatiques code, et ajoutez la ligne suivante:
Votre premier exemple:
if err != nil {
//handle err
}
est plus idiomatique lorsque l'on traite avec plus d'une valeur de retour. par exemple:
val, err := someFunc()
if err != nil {
//handle err
}
//do stuff with val
Votre deuxième exemple est agréable d'abréviation quand ne traite que de l' err
de la valeur. Cela s'applique si la fonction renvoie uniquement un error
, ou si vous avez délibérément ignorer le retour à des valeurs autres que l' error
. Comme un exemple, il est parfois utilisé avec l' Reader
et Writer
fonctions qui renvoient un int
le nombre d'octets écrits (parfois inutiles de l'information) et un error
:
if _, err := f.Read(file); err != nil {
//handle err
}
//do stuff with f
La deuxième forme est appelée à l'aide d'un si l'instruction d'initialisation.
Donc, en ce qui concerne les meilleures pratiques, autant que je sache (sauf pour l'utilisation de la "erreurs" package pour créer de nouvelles erreurs lorsque vous en avez besoin) vous avez couvert pratiquement tout ce que vous devez savoir buter les erreurs dans le jeu de Go!
EDIT: Si vous trouvez que vous avez vraiment ne pouvez pas vivre sans exceptions, vous pouvez imiter avec defer
,panic
& recover
.