Sobes.tech
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.New lub fmt.Errorf dla 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.