Menu
Coddy logo textTech

Pojęcie błędów

Część sekcji Podstawy ścieżki GO w Coddy. Lekcja 102 z 109.

W Go błędy to wartości wskazujące, że coś poszło nie tak. Go obsługuje błędy jawnie, zamiast używać wyjątków.

Utwórzmy funkcję, która może spowodować błąd podczas dzielenia liczb:

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("cannot divide by zero")
    }
    return a / b, nil
}

Ta funkcja zwraca dwie wartości: wynik dzielenia i ewentualny błąd. Jeśli dzielnik wynosi zero, zwracamy komunikat o błędzie zamiast wykonywać dzielenie.

Teraz użyjmy naszej funkcji i obsłużmy ewentualne błędy:

result, err := divide(10, 0)
if err != nil {
    fmt.Println("Error:", err)
} else {
    fmt.Println("Result:", result)
}

Po wykonaniu tego kodu zobaczymy na ekranie komunikat o błędzie, ponieważ próbowaliśmy dzielić przez zero:

Error: cannot divide by zero

To pokazuje wzorzec obsługi błędów w Go: sprawdź, czy wystąpił błąd (err != nil), a następnie podejmij odpowiednie działanie. Jeśli nie wystąpił błąd, możemy bezpiecznie użyć wyniku.

challenge icon

Wyzwanie

Łatwy

W tym wyzwaniu poćwiczysz obsługę błędów w Go. Utworzysz funkcję, która dzieli dwie liczby i zwraca błąd, jeśli podjęta zostanie próba dzielenia przez zero.

Twoje zadanie:

  1. Uzupełnij funkcję divide, która przyjmuje dwie liczby całkowite i zwraca ich iloraz oraz błąd.
  2. Jeśli dzielnik wynosi zero, zwróć 0 oraz błąd z komunikatem "division by zero".
  3. Jeśli dzielenie jest prawidłowe, zwróć wynik oraz nil jako błąd.
  4. W funkcji main wywołaj divide z podanymi wartościami i odpowiednio obsłuż wszelkie błędy.

To ćwiczenie pokazuje, jak funkcje w Go często zwracają wynik i błąd oraz jak sprawdzać i obsługiwać te błędy.

Spróbuj swoich sił

package main
import (
    "errors"
    "fmt"
)
// divide dzieli a przez b i zwraca wynik
// Jeśli b wynosi 0, zwraca błąd
func divide(a, b int) (int, error) {
    // TODO: Zaimplementuj funkcję divide
    // Jeśli b wynosi 0, zwróć 0 i błąd z komunikatem "division by zero"
    // W przeciwnym razie zwróć a/b oraz nil jako wartość błędu

}
func main() {
    // Pierwszy przypadek testowy
    a, b := 10, 2
    result, err := divide(a, b)
    if err != nil {
        fmt.Printf("Error: %s\n", err)
    } else {
        fmt.Printf("Result: %d\n", result)
    }

    // Drugi przypadek testowy
    a, b = 8, 0
    result, err = divide(a, b)
    if err != nil {
        fmt.Printf("Error: %s\n", err)
    } else {
        fmt.Printf("Result: %d\n", result)
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Go online