Bazele gestionării erorilor în Golang

Una dintre cele mai utile caracteristici ale limbajului de programare Go este modul în care acesta gestionează erorile. În loc să folosească o metodologie Try/Catch, așa cum fac alte limbaje de programare, Go tratează erorile ca valori de returnare normale.

Creând module simple și aplicând câteva reguli de logare, putem produce mesaje de eroare utile pentru a prinde tot felul de excepții în timpul procesului de dezvoltare.

În acest articol, vom acoperi unele dintre cele mai de bază moduri în care Golang găsește și tratează aceste excepții.

Manipularea de bază a erorilor în Golang

Potem capta erori în Go prin utilizarea unor instrucțiuni simple if/then care verifică condițiile în care parametrii necesari nu sunt îndepliniți.

Să ne uităm la un modul de bază pe care îl putem crea pentru a verifica dacă un șir de caractere include sau nu o valoare.

Creăm un pachet numit „hello” și importăm modulele standard „errors” și „fmt” pentru a recunoaște erorile și textul formatat:

package helloimport ("errors""fmt")

Apoi putem crea un modul care va returna un șir de text pentru o variabilă numită.

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

Principiul de mai sus verifică dacă este returnat un șir gol pentru variabila „nume”, care apoi returnează o nouă eroare cu un text specificat. Aceasta este condiția noastră de eroare. O condiție de eroare verifică dacă eroarea însăși există.
În cazul în care condiția nu este îndeplinită (adică nu există nicio eroare), returnăm valoarea care se potrivește cu variabila „name” specificată:

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

Rețineți că se returnează mesajul și valoarea „nil”, ceea ce înseamnă că nu există nicio eroare. Acest lucru îi spune programului apelant că funcția a fost procesată fără erori.

Acum vom vedea cum putem apela acest pachet într-un script real.

Să creăm un script nou, numit test.go

Cum este normal în Golang, un script trebuie să înceapă cu definirea pachetului ca fiind „main”. Apoi importăm pachetele „fmt” și „log”, împreună cu pachetul „hello” creat de noi, așa cum se arată mai jos:

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

După aceea definim funcția noastră principală, setăm câteva proprietăți pentru loggerul nostru pentru a crea un prefix ușor de înțeles și (din motive de securitate) creăm un flag astfel încât să nu afișăm ora, fișierul sursă și numărul de linie.

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

În continuare, vom specifica un mesaj care să fie afișat:

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

În cele din urmă, căutăm să vedem dacă există o eroare verificând dacă „err” nu este egal cu „nil”. Dacă este cazul, imprimăm mesajul în consolă și ieșim.

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

Dacă nu există nicio condiție de eroare, pur și simplu imprimăm mesajul care a fost definit în pachetul nostru hello.

fmt.Println(message)}

Pentru a testa acest lucru, putem rula codul așa cum este. După ce o facem, ar trebui să obținem un rezultat care arată așa:

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

Dacă dorim să modificăm scriptul nostru test.go, introducem ceva de genul acesta:

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

Rezultatul nostru ar trebui să arate astfel:

>go run test.goHi, John. Welcome!

Un alt tip de mesaj de eroare pe care îl putem returna este:

fmt.Errorf – acesta va formata un șir de caractere în conformitate cu regulile lui Printf.

Manipularea numerelor întregi în Golang

Desigur, erorile de șir de caractere sunt doar un tip de eroare. Cu gestionarea erorilor Golang, există alte câteva erori pe care le puteți verifica în codul dumneavoastră. Una în special pe care ar trebui să o cunoașteți este cea a erorilor numerice.

Manipularea numerelor întregi este simplă pentru Go. Iată cum funcționează:

Să presupunem că avem erori numerice, cum ar fi dacă am împărți cu zero. Mai întâi creăm o funcție „Division”, care împarte două variabile x cu y. Pentru prima parte a condiției noastre if/then, trebuie să ne asigurăm că y nu este egal cu 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}}

Aceasta este funcția principală. Acum, îi puteți trece două variabile. În acest exemplu, vom folosi 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)}}

Apoi veți primi un mesaj care spune ceva de genul:

„Am primit o eroare: Nu trebuie să împarți cu zero!”

Acesta este doar un exemplu al modului în care puteți utiliza gestionarea erorilor Golang pentru a găsi erori numerice. Într-adevăr, cu funcțiile potrivite, puteți găsi mai multe erori pe cont propriu prin intermediul Golang.

Căutarea erorilor de stare HTTP

Cu Golang, puteți afișa erori de stare HTTP dacă un API pe care îl apelăm livrează una.

Iată cum:

În primul rând, să importăm un nou pachet, „net/http”:

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

În funcția noastră principală, apelați o aplicație (de exemplu, un site web) și înregistrați orice eroare. Știm că solicitările reușite se încadrează în intervalul 2xx, deci creați un status respectiv care să găsească orice erori HTTP care nu se încadrează în acest interval. Puteți face acest lucru în felul următor:

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 

După cum puteți vedea, funcția noastră principală este setată

>= 200 && resp.StatusCode <= 299

care va verifica dacă orice cerere HTTP se încadrează în intervalul 2xx. În cazul în care cererea nu îndeplinește această condiție, va afișa un mesaj de eroare.

Cu un singur modul, puteți aduna rapid toate informațiile de care aveți nevoie pentru a găsi și a vă repara codul Golang.

Rezumat

Acest ghid doar zgârie suprafața în ceea ce privește modul în care limbajul Go este conceput pentru a gestiona erorile. Cu toate acestea, elementele de bază, cum ar fi cum să verificați existența unui șir de caractere, cum să ridicați o condiție de eroare dacă este prezentată o declarație numerică ilogică și cum să verificați codurile de stare HTTP ale unui răspuns, sunt toate locuri excelente pentru a începe călătoria dvs. de monitorizare a erorilor Golang.

Nu aveți timp să verificați și să utilizați manual aceste tehnici de tratare a erorilor Golang? Aici este locul unde instrumente precum Airbrake Error Monitoring vin la îndemână. Cu Airbrake Error Monitoring, veți putea găsi rapid erori fără a fi nevoie să creați module individuale. Încercați Airbrake Error Monitoring gratuit timp de 30 de zile pentru un număr nelimitat de erori și evenimente de performanță.

Lasă un răspuns

Adresa ta de email nu va fi publicată.