Funkcje zwracające błędy
Część sekcji Podstawy ścieżki GO w Coddy. Lekcja 104 z 109.
W Go funkcje często zwracają wartość error jako ostatnią wartość zwracaną, aby wskazać, czy coś poszło nie tak.
Utwórz funkcję, która zwraca zarówno wynik, jak i błąd:
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero")
}
return a / b, nil
}Wywołaj funkcję i obsłuż błąd:
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
}Wynik będzie następujący:
Error: cannot divide by zeroWyzwanie
PoczątkującyW tym wyzwaniu poćwiczysz tworzenie funkcji, która zwraca błąd, gdy podano nieprawidłowe dane wejściowe.
Musisz uzupełnić funkcję validateUsername, która sprawdza, czy nazwa użytkownika jest prawidłowa. Nazwa użytkownika jest prawidłowa, jeśli ma co najmniej 3 znaki. Jeśli nazwa użytkownika jest prawidłowa, zwróć nil jako błąd. Jeśli jest nieprawidłowa, zwróć błąd z odpowiednim komunikatem.
Kod wywołujący Twoją funkcję i obsługujący błąd jest już dla Ciebie napisany.
Uwaga: To wyzwanie korzysta ze wstępnie zdefiniowanych zmiennych zamiast danych wejściowych użytkownika.
Spróbuj swoich sił
package main
import (
"errors"
"fmt"
)
func validateUsername(username string) error {
// TODO: Sprawdź, czy nazwa użytkownika ma mniej niż 3 znaki
// Jeśli tak, zwróć błąd z komunikatem "username too short"
// W przeciwnym razie zwróć nil (brak błędu)
return nil
}
func main() {
// Przetestuj z poprawną nazwą użytkownika
validName := "bob123"
err1 := validateUsername(validName)
if err1 != nil {
fmt.Printf("%s is invalid: %v\n", validName, err1)
} else {
fmt.Printf("%s is valid!\n", validName)
}
// Przetestuj z niepoprawną nazwą użytkownika
invalidName := "ab"
err2 := validateUsername(invalidName)
if err2 != nil {
fmt.Printf("%s is invalid: %v\n", invalidName, err2)
} else {
fmt.Printf("%s is valid!\n", invalidName)
}
}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