Junior — Middle
Jak zarządzane są wyjątki i błędy w Twojej aplikacji?
sobes.tech AI
Odpowiedź od AI
W Go obsługa błędów różni się od wielu innych języków, ponieważ tutaj nie ma wyjątków w tradycyjnym sensie. Zamiast tego funkcje zwykle zwracają wartość błędu (error) jako drugi wynik.
Główne podejścia:
-
Sprawdzanie błędu po wywołaniu funkcji:
result, err := someFunction() if err != nil { // obsługa błędu log.Println("Błąd:", err) return err } // kontynuacja pracy z result -
Tworzenie własnych typów błędów za pomocą
errors.Newlubfmt.Errorfdla bardziej informacyjnych komunikatów. -
Paniki (
panic) i odzyskiwanie (recover) są rzadko używane, głównie dla krytycznych błędów, które nie powinny wystąpić w normalnym toku. -
Logowanie błędów i ich przekazywanie w górę stosu do scentralizowanego obsługi.
Przykład obsługi błędu:
package main
import (
"errors"
"fmt"
)
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("dzielenie przez zero")
}
return a / b, nil
}
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("Błąd:", err)
return
}
fmt.Println("Wynik:", result)
}
W ten sposób, w Go, błędy są obsługiwane jawnie, co zwiększa czytelność i niezawodność kodu.