Podstawowa obsługa błędów
Część sekcji Podstawy ścieżki GO w Coddy. Lekcja 108 z 109.
Podstawowa obsługa błędów to podstawowy wzorzec w Go, w którym sprawdzasz błędy po operacjach, które mogą się nie powieść.
Nauczmy się obsługiwać błędy w Go, tworząc prostą funkcję dzielenia, która zwraca błąd przy dzieleniu przez zero:
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}Ta funkcja zwraca dwie wartości: wynik dzielenia i błąd. Jeśli dzielnik wynosi zero, zwraca komunikat o błędzie zamiast próbować wykonać dzielenie.
Teraz zobaczmy, jak używać tej funkcji i obsługiwać ewentualne błędy:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error occurred:", err)
return // Zatrzymaj wykonywanie lub obsłuż błąd
}
fmt.Println("Result:", result)Po wykonaniu tego kodu sprawdzamy, czy wystąpił błąd, używając warunku if err != nil. Ponieważ próbowaliśmy dzielić przez zero, funkcja zwraca błąd, a na ekranie pojawi się następujący komunikat:
Error occurred: division by zeroTen wzorzec polegający na zwracaniu błędu jako ostatniej wartości zwracanej i natychmiastowym jego sprawdzaniu jest bardzo powszechny w Go. Pozwala programowi łagodnie obsługiwać błędy zamiast ulegać awarii.
Wyzwanie
ŁatwyW tym wyzwaniu przećwiczysz podstawową obsługę błędów w Go. Masz funkcję, która dzieli dwie liczby, ale dzielenie przez zero powoduje błąd w czasie wykonywania. Twoim zadaniem jest dodać obsługę błędów, aby zapobiec awarii.
Kod zawiera już funkcję, która zwraca zarówno wynik, jak i błąd. Musisz sprawdzić, czy wystąpił błąd, zanim użyjesz wyniku.
Spróbuj swoich sił
package main
import (
"errors"
"fmt"
)
// Ta funkcja dzieli x przez y i zwraca błąd, jeśli y jest równe zero
func divide(x, y float64) (float64, error) {
if y == 0 {
return 0, errors.New("cannot divide by zero")
}
return x / y, nil
}
func main() {
// Wartości testowe
numerator := 10.0
denominator := 0.0
// Wywołaj funkcję divide
result, err := divide(numerator, denominator)
// TODO: Sprawdź, czy err nie jest nil (wystąpił błąd)
// Jeśli wystąpił błąd, wypisz go za pomocą fmt.Println(err)
// W przeciwnym razie wypisz wynik za pomocą fmt.Printf("Result: %.2f\n", result)
// Usuń ten wiersz i zaimplementuj powyżej prawidłową obsługę błędów
fmt.Printf("Result: %.2f\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 dynamiczne14Podstawowa obsługa błędów
Pojęcie błędówInterfejs `error`Funkcje zwracające błędySprawdzanie błędówTworzenie prostych błędówTworzenie błędów z formatowaniemPodstawowa obsługa błędówPowtórzenie – obsługa problemów3Podstawowe 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