Základy zpracování chyb v jazyce Golang

Jednou z nejužitečnějších funkcí programovacího jazyka Go je způsob zpracování chyb. Namísto používání metodiky Try/Catch jako v jiných programovacích jazycích se v jazyce Go s chybami zachází jako s normálními návratovými hodnotami.

Vytvořením jednoduchých modulů a použitím několika pravidel pro protokolování můžeme vytvářet užitečná chybová hlášení, která zachytí nejrůznější výjimky během procesu vývoje.

V tomto článku se budeme zabývat některými nejzákladnějšími způsoby, jak Golang tyto výjimky vyhledává a zpracovává.

Základní zpracování chyb v jazyce Golang

Chyby můžeme v jazyce Go zachytit pomocí jednoduchých příkazů if/then, které kontrolují podmínky, kdy nejsou splněny požadované parametry.

Podívejme se na základní modul, který můžeme vytvořit pro kontrolu, zda řetězec obsahuje hodnotu, nebo ne.

Vytvořte balíček s názvem „hello“ a importujte standardní moduly „errors“ a „fmt“ pro rozpoznání chyb a formátovaného textu:

package helloimport ("errors""fmt")

Poté můžeme vytvořit modul, který vrátí řetězec textu pro pojmenovanou proměnnou.

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

Výše uvedený příklad kontroluje, zda je pro proměnnou „name“ vrácen prázdný řetězec, který pak vrátí novou chybu s nějakým zadaným textem. To je naše chybová podmínka. Chybová podmínka kontroluje, zda existuje samotná chyba.
Pokud není podmínka splněna (tj. neexistuje žádná chyba), vrátíme hodnotu, která odpovídá zadané proměnné „name“:

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

Všimněte si, že vrací zprávu a hodnotu „nil“, což znamená, že neexistuje žádná chyba. Tím je volajícímu programu sděleno, že funkce proběhla bez chyby.

Nyní se podíváme na to, jak můžeme tento balíček zavolat ve skutečném skriptu.

Vytvoříme nový skript s názvem test.go

Jak je v jazyce Golang obvyklé, skript musí začínat definováním balíčku jako „main“. Poté importujeme balíčky „fmt“ a „log“ spolu s naším vytvořeným balíčkem „hello“, jak je uvedeno níže:

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

Níže definujeme naši hlavní funkci, nastavíme několik vlastností pro náš logger, abychom vytvořili snadno pochopitelný prefix, a (z bezpečnostních důvodů) vytvoříme příznak, abychom nezobrazovali čas, zdrojový soubor a číslo řádku.

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

Následuje zadání zprávy, která se má zobrazit:

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

Nakonec se podíváme, zda došlo k chybě, a to tak, že zkontrolujeme, zda „err“ není rovno „nil“. Pokud tomu tak je, vypíšeme zprávu do konzoly a ukončíme ji.

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

Pokud žádný chybový stav neexistuje, jednoduše vypíšeme zprávu, která byla definována v našem balíčku hello.

fmt.Println(message)}

Pro vyzkoušení můžeme kód spustit tak, jak je. Jakmile tak učiníme, měli bychom dostat výsledek, který bude vypadat takto:

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

Pokud chceme náš skript test.go upravit, zadáme něco takového:

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

Náš výstup by pak měl vypadat takto:

>go run test.goHi, John. Welcome!

Dalším typem chybového hlášení, které můžeme vrátit, je:

fmt.Errorf – to bude formátovat řetězec podle pravidel Printf.

Pracování s celými čísly v Golangu

Chyby v řetězcích jsou samozřejmě jen jedním typem chyb. Díky obsluze chyb v jazyce Golang existuje několik dalších chyb, které můžete ve svém kódu kontrolovat. Jednou z nich, o které byste měli vědět, jsou zejména numerické chyby.

Ošetřování celých čísel je v systému Go jednoduché. Funguje to takto:

Řekněme, že máme číselné chyby, například kdybychom dělili nulou. Nejprve vytvoříme funkci „Dělení“, která vydělí dvě proměnné x číslem y. Pro první část naší podmínky if/then se musíme ujistit, že y není rovno nule:

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}}

Toto je hlavní funkce. Nyní jí můžete předat dvě proměnné. V tomto příkladu použijeme 12 a 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)}}

Poté se zobrazí zpráva, která říká něco jako:

„Máme chybu:

Toto je jen jeden z příkladů, jak můžete využít obsluhu chyb Golangu k nalezení číselných chyb. Opravdu, se správnými funkcemi můžete prostřednictvím jazyka Golang sami najít několik chyb.

Zjištění stavových chyb HTTP

Pomocí jazyka Golang můžete vyvolat stavové chyby HTTP, pokud rozhraní API, které voláme, nějakou poskytuje.

Jak na to:

Nejprve importujme nový balíček „net/http“:

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

V naší hlavní funkci zavoláme aplikaci (např. webovou stránku) a zaznamenáme případné chyby. Víme, že úspěšné požadavky spadají do rozsahu 2xx, takže vytvořte příslušný stav, který najde všechny chyby HTTP, které spadají mimo tento rozsah. To můžete provést následujícím způsobem:

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 vidíte, naše hlavní funkce je nastavena na

>= 200 && resp.StatusCode <= 299

která zkontroluje, zda některé požadavky HTTP spadají do rozsahu 2xx. Pokud požadavek tuto podmínku nesplňuje, zobrazí chybovou zprávu.

Pomocí jediného modulu můžete rychle shromáždit všechny informace potřebné k nalezení a opravě kódu Golang.

Shrnutí

Tento průvodce pouze poškrábe povrch toho, jak je jazyk Go navržen pro zpracování chyb. Nicméně základy, jako například jak zkontrolovat existenci řetězce, jak vyvolat chybovou podmínku, pokud je prezentován nelogický číselný příkaz, a jak zkontrolovat stavové kódy HTTP odpovědi, jsou skvělým začátkem na vaší cestě za sledováním chyb jazyka Golang.

Nemáte čas kontrolovat a používat tyto techniky zpracování chyb jazyka Golang ručně? Právě zde se hodí nástroje jako Airbrake Error Monitoring. Pomocí nástroje Airbrake Error Monitoring budete moci rychle najít chyby, aniž byste museli vytvářet jednotlivé moduly. Vyzkoušejte si Airbrake Error Monitoring zdarma na 30 dní pro neomezený počet chyb a výkonnostních událostí.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.