Zgodziłbym się z odpowiedzią jnml, że oba są kodem idiomatycznym i dodam:
Twój pierwszy przykład:
if err != nil {
//handle err
}
jest bardziej idiomatyczny, gdy mamy do czynienia z więcej niż jedną wartością zwracaną. na przykład:
val, err := someFunc()
if err != nil {
//handle err
}
//do stuff with val
Twój drugi przykład jest fajnym skrótem, jeśli chodzi tylko o err
wartość. Ma to zastosowanie, jeśli funkcja zwraca tylko wartość an error
lub celowo zignorujesz zwrócone wartości inne niż error
. Na przykład jest to czasami używane z funkcjami Reader
i, Writer
które zwracają int
liczbę zapisanych bajtów (czasami niepotrzebne informacje) oraz error
:
if _, err := f.Read(file); err != nil {
//handle err
}
//do stuff with f
Drugi formularz jest określany jako użycie instrukcji inicjalizacji if .
Jeśli chodzi o najlepsze praktyki, o ile wiem (z wyjątkiem używania pakietu „errors” do tworzenia nowych błędów, gdy ich potrzebujesz), omówiłeś prawie wszystko, co musisz wiedzieć o błędach w Go!
EDIT: Jeśli okaże się, naprawdę nie mogą żyć bez wyjątków, można naśladować ich defer
, panic
irecover
.