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 zeroTo 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.
Wyzwanie
ŁatwyW 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:
- Uzupełnij funkcję
divide, która przyjmuje dwie liczby całkowite i zwraca ich iloraz oraz błąd. - Jeśli dzielnik wynosi zero, zwróć 0 oraz błąd z komunikatem "division by zero".
- Jeśli dzielenie jest prawidłowe, zwróć wynik oraz
niljako błąd. - W funkcji
mainwywołajdividez 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)
}
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
4Operatory porównania i logiczne
Operatory porównania – część 1Operatory porównania – część 2Logiczny operator ANDLogiczny operator ORLogiczny operator NOTPodstawy kolejności wykonywania operatorówPodsumowanie – porównywanie7Sterowanie przepływem: pętle
Jak działa pętla `for`Pętla `for` — podstawyPętla `for` — tylko warunekSłowo kluczowe `break`Słowo kluczowe `continue`Pętle zagnieżdżonePodsumowanie — powtarzanie działań2Zmienne i podstawowe typy danych
Czym jest zmiennaWnioskowanie o typie za pomocą `:=`Liczby całkowite (int)Liczby zmiennoprzecinkoweWartości logiczneCiągi znakówWartości zeroweStałeKonwencje nazewnictwaPodsumowanie – zmienne i typy5Podstawowe wejście/wyjście
Formatowane wyjścieSpecyfikatory formatuWyświetlanie typówPobieranie podstawowych danych od użytkownikaPodsumowanie — wejście i wyjście8Funkcje
Zrozumienie funkcjiDeklarowanie funkcjiWywoływanie funkcjiParametry funkcjiZwracanie jednej wartościZwracanie wielu wartościNazwane wartości zwracanePodstawy zakresu funkcjiPodsumowanie — tworzenie wielokrotnego użytku kodu11Typy złożone: wycinki
Wprowadzenie do wycinkówDeklarowanie literałów wycinkówTworzenie wycinków za pomocą `make`Długość a pojemność wycinkaDostęp do elementów wycinkaDodawanie elementówWycinanie z istniejących wycinków i tablicIterowanie po wycinkachKopiowanie wycinkówPodsumowanie — listy dynamiczne3Podstawowe operatory
Operatory arytmetyczneOperator dzieleniaOperator moduloOperator przypisaniaOperatory przypisania z działaniemZwiększanie i zmniejszaniePowtórka – obliczenia6Sterowanie przepływem: instrukcje warunkowe
Instrukcja `if`Słowo kluczowe `else`Słowo kluczowe `else if`Przesłanianie zmiennych w `if`Inicjalizacja zmiennychInstrukcja `switch``switch` z wyrażeniami`switch` bez wyrażeniaSłowo kluczowe `fallthrough`Podsumowanie — podejmowanie decyzjiPoćwicz samodzielnie: Kompilator Go online