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 errWert befassen . Dies gilt, wenn die Funktion nur ein zurückgibt erroroder wenn Sie die zurückgegebenen Werte außer dem absichtlich ignorieren error. Als Beispiel wird dies manchmal mit den Funktionen Readerund Writerverwendet, die eine intder 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, panicundrecover .