Podstawy obsługi błędów w Golangu

Jedną z bardziej użytecznych cech języka programowania Go jest sposób, w jaki obsługuje on błędy. Zamiast używać metodologii Try/Catch jak inne języki programowania, Go traktuje błędy jako normalne wartości zwracane.

Tworząc proste moduły i stosując kilka reguł logowania, możemy tworzyć użyteczne komunikaty o błędach, aby wychwycić wszelkiego rodzaju wyjątki podczas procesu programowania.

W tym artykule omówimy niektóre z najbardziej podstawowych sposobów, w jakie Golang znajduje i obsługuje te wyjątki.

Podstawowa obsługa błędów w Golangu

Błędy w Go możemy wychwytywać za pomocą prostych instrukcji if/then, które sprawdzają warunki, w których wymagane parametry nie są spełnione.

Przyjrzyjrzyjmy się podstawowemu modułowi, który możemy stworzyć, aby sprawdzić, czy łańcuch zawiera wartość, czy nie.

Utwórzmy pakiet o nazwie „hello” i zaimportujmy standardowe moduły „errors” i „fmt”, aby rozpoznać błędy i sformatowany tekst:

package helloimport ("errors""fmt")

Następnie możemy stworzyć moduł, który zwróci ciąg tekstu dla nazwanej zmiennej.

func Hello(name string) (string, error) {if name == "" {return "", errors.New("No name was given")}

Powyżej sprawdzamy, czy dla zmiennej „name” zwracany jest pusty ciąg znaków, który następnie zwraca nowy błąd z określonym tekstem. To jest nasz warunek błędu. Warunek błędu sprawdza, czy istnieje sam błąd.
Jeśli warunek nie jest spełniony (tzn. nie ma błędu), zwracamy wartość, która pasuje do określonej zmiennej „name”:

message := fmt.Sprintf("Hi, %v. Welcome!", name)return message, nil}

Zauważ, że funkcja zwraca komunikat i wartość „nil”, co oznacza, że nie ma błędu. To mówi programowi wywołującemu, że funkcja została przetworzona bez błędu.

Teraz przyjrzymy się, jak możemy wywołać ten pakiet w rzeczywistym skrypcie.

Utwórzmy nowy skrypt o nazwie test.go

Jak to zwykle bywa w Golangu, skrypt musi zacząć się od zdefiniowania pakietu jako „main”. Następnie importujemy pakiety „fmt” i „log”, wraz z naszym stworzonym pakietem „hello”, jak pokazano poniżej:

package mainimport ("fmt""log""yoursite.com/hello")

Poniżej definiujemy naszą główną funkcję, ustawiamy kilka właściwości dla naszego loggera, aby stworzyć łatwy do zrozumienia prefiks, oraz (ze względów bezpieczeństwa) tworzymy flagę, aby nie pokazywać czasu, pliku źródłowego i numeru linii.

func main() {log.SetPrefix("Hello: ")log.SetFlags(0)

Następnie określimy komunikat, który ma zostać wyświetlony:

message, err := hello.Hello("")

Na koniec sprawdzamy, czy wystąpił błąd, sprawdzając czy „err” nie jest równe „nil”. Jeśli tak jest, wypisujemy komunikat do konsoli i wychodzimy.

if err != nil {log.Fatal(err)}

Jeśli nie występuje warunek błędu, po prostu wypisujemy komunikat, który został zdefiniowany w naszym pakiecie hello.

fmt.Println(message)}

Aby to przetestować, możemy uruchomić kod tak jak jest. Gdy to zrobimy, powinniśmy otrzymać wynik, który wygląda tak:

>go run test.gogreetings: No name was givenexit status 1

Jeśli chcemy zmodyfikować nasz skrypt test.go, wprowadź coś takiego:

message, err := hello.Hello("John")

Nasze dane wyjściowe powinny wtedy wyglądać tak:

>go run test.goHi, John. Welcome!

Innym typem komunikatu o błędzie, który możemy zwrócić, jest:

fmt.Errorf – sformatuje on ciąg znaków zgodnie z regułami Printf.

Obsługa liczb całkowitych w Golangu

Oczywiście, błędy łańcuchowe są tylko jednym z typów błędów. Dzięki obsłudze błędów w Golangu, istnieje kilka innych błędów, które możesz sprawdzić w swoim kodzie. Jednym z nich, o którym szczególnie powinieneś wiedzieć, są błędy numeryczne.

Obsługa liczb całkowitych jest prosta w Go. Oto jak to działa:

Powiedzmy, że mamy błędy numeryczne, takie jak dzielenie przez zero. Najpierw tworzymy funkcję „Division”, która dzieli dwie zmienne x przez y. W pierwszej części naszego warunku if/then musimy się upewnić, że y nie jest równe zero:

func Division(x int, y int) (int, error) {if y == 0 {return 0, errors.New("Thou shalt not divide by zero!")} else {return (x / y), nil}}

To jest główna funkcja. Teraz, możesz przekazać jej dwie zmienne. W tym przykładzie, użyjemy 12 i 0.

func main() {if result, err := Division(12, 0); err != nil {fmt.Println("We got an error: ", err)} else {fmt.Println("The answer is", result)}}

Wtedy otrzymasz komunikat, który mówi coś w stylu:

„We got an error: Thou shalt not divide by zero!”

To tylko jeden z przykładów, jak możesz użyć obsługi błędów Golanga, aby znaleźć błędy numeryczne. Naprawdę, z odpowiednimi funkcjami, można znaleźć wiele błędów samodzielnie za pomocą Golanga.

Znajdowanie błędów statusu HTTP

Z Golangiem można wywołać błędy statusu HTTP, jeśli API, które wywołujemy, je dostarczy.

Jak to zrobić:

Po pierwsze, zaimportujmy nowy pakiet „net/http”:

import ( "fmt" "log" "net/http")

W naszej głównej funkcji, wywołajmy aplikację (np. stronę internetową) i zapiszmy wszystkie błędy. Wiemy, że udane żądania mieszczą się w zakresie 2xx, więc stwórz odpowiedni status, który znajdzie wszelkie błędy HTTP, które nie mieszczą się w tym zakresie. Możesz to zrobić w następujący sposób:

func main() { resp, err := http.Get("https://example.com") if err != nil { log.Fatal(err) } fmt.Println("HTTP Response Status:", resp.StatusCode, http.StatusText(resp.StatusCode)) if resp.StatusCode >= 200 && resp.StatusCode 

Jak widać, nasza główna funkcja jest ustawiona na

>= 200 && resp.StatusCode <= 299

która będzie sprawdzać, czy jakiekolwiek żądania HTTP mieszczą się w zakresie 2xx. Jeśli żądanie nie spełnia tego warunku, wyświetli komunikat o błędzie.

Mając tylko jeden moduł, możesz szybko zebrać wszystkie informacje potrzebne do znalezienia i naprawienia kodu Golanga.

Podsumowanie

Ten przewodnik tylko zarysowuje powierzchnię tego, jak język Go jest zaprojektowany do obsługi błędów. Jednakże, podstawy takie jak jak sprawdzić istnienie łańcucha znaków, jak podnieść warunek błędu, jeśli prezentowane jest nielogiczne stwierdzenie liczbowe, oraz jak sprawdzić kody statusu HTTP odpowiedzi są świetnymi miejscami do rozpoczęcia swojej podróży w monitorowaniu błędów Golanga.

Nie masz czasu, aby sprawdzić i użyć tych technik obsługi błędów Golanga ręcznie? To właśnie tam przydają się narzędzia takie jak Airbrake Error Monitoring. Z Airbrake Error Monitoring, będziesz mógł szybko znaleźć błędy bez potrzeby tworzenia poszczególnych modułów. Wypróbuj Airbrake Error Monitoring za darmo przez 30 dni dla nieograniczonej ilości błędów i zdarzeń wydajnościowych.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.