Gestionarea erorilor este una dintre operațiunile frecvente din ciclul de dezvoltare a software-ului. Este un aspect crucial al unei bune programe. Go adoptă o abordare simplă și ușor de utilizat, cu mecanismul său încorporat pentru gestionarea erorilor. Se bazează pe returnarea erorilor din funcții și metode, permițându-vă să vă concentrați pe funcționalitatea codului care este intuitivă și ușor de citit.
Gestionați în mod explicit erorile în Go, ceea ce duce la un cadru solid pentru feedback, cu capacitatea de a implementa logica de reîncercare în mod consecvent. The erori pachetul oferă funcționalități suplimentare pentru tratarea erorilor.
Pachetul de erori
Pachetul de erori este unul dintre pachetele din biblioteca standard Go. Pachetul oferă primitive simple de gestionare a erorilor și funcționalități pentru crearea și manipularea erorilor în mod consecvent în codul Go.
Pachetul oferă Nou funcție pentru crearea de erori cu mesaje de eroare personalizate pe care le puteți utiliza în același mod ca orice tip de eroare încorporat, cum ar fi zero și Eroare metoda de eroare interfata.
The erori pachetul oferă, de asemenea, funcționalitate pentru împachetarea și despachetarea erorilor, o metodă pentru aserțiunile de tip asupra erorilor.
Puteți importa erori pachet cu cuvântul cheie import. Pur și simplu specificați numele pachetului în lista dvs. de importuri.
import"erori"
Captarea și gestionarea erorilor în Go
Cunoașterea de bază a gestionării erorilor în Go pune bazele înțelegerii erori pachet. Funcțiile și metodele returnează erori care sunt însoțite de o resursă.
Iată un exemplu de gestionare a erorilor dintr-o operațiune de deschidere a fișierului cu sistemul încorporat os pachet.
pachet principal
import (
"fmt"
"os"
)funcprincipal() {
fișier, err := os. Deschis(„filename.txt”)dacă greș!= zero {
fmt. Println (eroare)
}
// ...
}
The Deschis metoda de os pachetul este util când lucrul cu fișiere text în Go. Deschide un fișier, returnând o instanță de fișier deschis și un eroare.
Valoarea erorii ar putea fi zero tip, indicând nicio eroare. Cu toate acestea, puteți verifica un caz care nu este zero și puteți gestiona o eroare dacă este prezentă. În cazul de mai sus, blocul if tipărește eroarea.
Puteți accesa Eroare metoda unei erori pentru a extrage mai multe informații despre eroare (de obicei, o descriere).
dacă greș!= zero {
fmt. Println (err. Eroare())
}
De exemplu, dacă fișierul nu există, veți vedea un mesaj de eroare care arată cam așa:
Crearea erorilor în Go
Puteți crea erori cu Nou metoda de erori pachet. Această metodă preia un mesaj șir și returnează erorile întâlnite.
import"erori"
funcprincipal() {
err := erori. Nou("ceva n-a mers bine")
dacă greș!= zero {
// codul de gestionare a erorilor merge aici
}
}
The principal funcția creează o nouă eroare și tratează posibilele erori de la crearea erorii cu un dacă afirmație.
De asemenea, puteți defini erori personalizate în Go. Metoda convențională utilizează o structură și o funcție de eroare pentru a implementa structura pe baza funcționalității erorii.
pachet principal
import"fmt"
tip CustomError struct {
info şir
}funcprincipal() {
// exemplu de instanțiere a structurii
err := customError{
info: "Ceva n-a mers bine!",
}
// iese instanța structurii
fmt. Println (eroare)
}
The CustomError struct este planul pentru eroare, iar info câmpul șir va reține mesajul de eroare.
Funcțiile dvs. de eroare pot implementa CustomError struct și returnează un șir de eroare.
func(ce customError)Eroare()şir {
întoarcere fmt. Sprintf(„A apărut o eroare personalizată: %v”, ce.info)
}
The Eroare metoda de CustomError struct returnează un șir folosind metoda de formatare Sprintf a pachetului fmt.
Erori de împachetare și despachetare în Go
Puteți adăuga mai multe informații contextuale la erori prin împachetarea acestora. Veți folosi în primul rând erorile încapsulate pentru a crea mesaje de eroare clare pentru precizie în depanare.
Puteți folosi Errorf metoda de fmt pachet care oferă funcționalitate pentru formatarea mesajelor de eroare pentru a încheia erorile. The Errorf metoda preia un verb de formatare șir și șir de caractere și eroarea și returnează eroarea încapsulată.
import (
"fmt"
"os"
)funcprincipal() {
_, err := os. Deschis(„filename.txt”)
dacă greș!= zero {
wrappedErr := fmt. Eroaref(„Eroare la deschiderea fișierului: %v”, greseala)
fmt. Println (wrappedErr)
}
}
The principal funcția deschide un fișier cu os pachetelor Deschis metoda și împachetează eroarea cu metoda Errorf a fmt pachet. Apoi trimite eroarea de împachetare în consolă.
Puteți despacheta erorile împachetate din programele dvs. cu Desfaceți metoda de erori pachet. The Desfaceți metoda preia eroarea de împachetat și returnează eroarea de împachetat.
import (
"fmt"
"os"
"erori"
)funcprincipal() {
_, err := os. Deschis(„filename.txt”)
dacă greș!= zero {
wrappedErr := fmt. Eroaref(„Eroare la deschiderea fișierului: %v”, greseala)
unwrappedErr := erori. Desfacere (wrappedErr)
fmt. Println (unwrappedErr)
}
}
The principal funcția include o eroare dintr-o operațiune de deschidere a fișierului și despachetatErr variabila deține eroarea dezlegată.
Înregistrați-vă rapoartele de eroare cu aceste pachete de înregistrare de la terți
Va trebui să înregistrați unele erori pentru revizuiri ulterioare, depanare și alte operațiuni în timpul procesului de dezvoltare a aplicației. Puteți folosi zap pachet de la pachetele Uber, Logrus, Zerolog și Log15 pentru înregistrare rapidă și structurată.