Ich würde der Antwort von jnml zustimmen, dass beide idiomatischer Code sind, und Folgendes hinzufügen:
Ihr erstes Beispiel:
if err != nil {
//handle err
}
ist idiomatischer, wenn es sich um mehr als einen Rückgabewert handelt. beispielsweise:
val, err := someFunc()
if err != nil {
//handle err
}
//do stuff with val
Ihr zweites Beispiel ist eine nette Abkürzung, wenn Sie sich nur mit dem err
Wert befassen . Dies gilt, wenn die Funktion nur ein zurückgibt error
oder wenn Sie die zurückgegebenen Werte außer dem absichtlich ignorieren error
. Als Beispiel wird dies manchmal mit den Funktionen Reader
und Writer
verwendet, die eine int
der geschriebenen Bytes (manchmal unnötige Informationen) und Folgendes zurückgeben error
:
if _, err := f.Read(file); err != nil {
//handle err
}
//do stuff with f
Die zweite Form wird als Verwendung einer if-Initialisierungsanweisung bezeichnet .
Soweit ich weiß, haben Sie in Bezug auf Best Practices (mit Ausnahme des Pakets "Fehler" , um neue Fehler zu erstellen, wenn Sie sie benötigen) so ziemlich alles behandelt, was Sie über Fehler in Go!
EDIT: Wenn Sie feststellen , wirklich nicht leben , ohne Ausnahmen, können Sie sie mit Mimik defer
, panic
undrecover
.