Läsare som du hjälper till att stödja MUO. När du gör ett köp med hjälp av länkar på vår webbplats kan vi tjäna en affiliate-provision. Läs mer.

Felhantering är en av de vanligaste operationerna i mjukvaruutvecklingscykeln. Det är en avgörande aspekt av bra programmering. Go har ett enkelt och lättanvänt tillvägagångssätt med sin inbyggda mekanism för felhantering. Den är baserad på att returnera fel från funktioner och metoder, vilket gör att du kan fokusera på kodfunktionalitet som är intuitiv och lätt att läsa.

Du hanterar fel i Go explicit, vilket resulterar i ett gediget ramverk för feedback, med möjligheten att implementera logik för omförsök konsekvent. De fel paketet ger ytterligare funktionalitet för felhantering.

Felpaketet

Felpaketet är ett av paketen i Gos standardbibliotek. Paketet tillhandahåller enkla felhanteringsprimitiver och funktioner för att skapa och manipulera fel konsekvent över Go-koden.

Paketet tillhandahåller Ny funktion för att skapa fel med anpassade felmeddelanden som du kan använda på samma sätt som alla inbyggda feltyper, t.ex.

instagram viewer
noll och Fel metod för fel gränssnitt.

De fel Paketet tillhandahåller också funktionalitet för att radera och packa upp fel, en metod för typpåståenden om fel.

Du kan importera fel paket med nyckelordet import. Ange bara namnet på paketet i din lista över importer.

importera"fel"

Fånga och hantera fel i farten

Kunskap om grundläggande felhantering i Go lägger grunden för att förstå fel paket. Funktioner och metoder returnerar fel som åtföljs av en resurs.

Här är ett exempel på felhantering från en filöppningsoperation med det inbyggda os paket.

paket huvud

importera (
"fmt"
"os"
)

funchuvud() {
fil, fel := os. Öppen("filnamn.txt")

om fel!= noll {
fmt. Println (fel)
}

// ...
}

De Öppen metod för os paketet är användbart när arbetar med textfiler i Go. Den öppnar en fil, returnerar en öppen filinstans och en fel.

Felvärdet kan vara noll typ, vilket anger inga fel. Du kan dock kontrollera om det inte är noll och hantera ett fel om det finns. I fallet ovan skriver if-blocket felet.

Du kan komma åt Fel metod för ett fel för att extrahera mer information om felet (vanligtvis en beskrivning).

om fel!= noll {
fmt. Println (fel. Fel())
}

Till exempel, om filen inte finns, kommer du att se ett felmeddelande som ser ut ungefär så här:

Skapa fel i Go

Du kan skapa fel med Ny metod för fel paket. Denna metod tar in ett strängmeddelande och returnerar påträffade fel.

importera"fel"

funchuvud() {
err := fel. Ny("något gick fel")

om fel!= noll {
// felhanteringskoden går här
}
}

De huvud funktionen skapar ett nytt fel och hanterar eventuella fel från felskapandet med en om påstående.

Du kan också definiera anpassade fel i Go. Den konventionella metoden använder en struktur och en felfunktion för att implementera strukturen baserat på felets funktionalitet.

paket huvud

importera"fmt"

typ customError struktur {
info sträng
}

funchuvud() {
// exempel instansiering av strukturen
err := customError{
info: "Något gick fel!",
}

// mata ut instansen av strukturen
fmt. Println (fel)
}

De customError struct är ritningen för felet, och info strängfältet kommer att innehålla felmeddelandet.

Dina felfunktioner kan implementera customError struct och returnera en felsträng.

func(ce customError)Fel()sträng {
lämna tillbaka fmt. Sprintf("Ett anpassat fel inträffade: %v", ce.info)
}

De Fel metod för customError struct returnerar en sträng med hjälp av formateringsmetoden Sprintf för fmt-paketet.

Inslagning och uppackning fel i Go

Du kan lägga till ytterligare kontextuell information till fel genom att slå in dem. Du kommer i första hand att använda raderade fel för att skapa tydliga felmeddelanden för precision vid felsökning.

Du kan använda Errorf metod för fmt paket som tillhandahåller funktionalitet för att formatera felmeddelanden för att radbryta fel. De Errorf metoden tar in ett sträng- och strängformateringsverb och felet och returnerar det raderade felet.

importera (
"fmt"
"os"
)

funchuvud() {
_, fel := os. Öppen("filnamn.txt")

om fel!= noll {
wrappedErr := fmt. Errorf("Fel vid öppning av fil: %v", fel)
fmt. Println (wrappedErr)
}
}

De huvud funktionen öppnar en fil med os paketets Öppen metoden och lindar felet med Errorf-metoden för fmt paket. Den skickar sedan ut det raderade felet till konsolen.

Du kan ta bort lindade fel i dina program med Packa upp metod för fel paket. De Packa upp metoden tar in det raderade felet och returnerar det ofullerade felet.

importera (
"fmt"
"os"
"fel"
)

funchuvud() {
_, fel := os. Öppen("filnamn.txt")

om fel!= noll {
wrappedErr := fmt. Errorf("Fel vid öppning av fil: %v", fel)
unwrappedErr := fel. Unwrap (wrappedErr)
fmt. Println (unwrappedErr)
}
}

De huvud funktion radbryter ett fel från en filöppningsoperation, och unwrappedErr variabeln innehåller det oinpackade felet.

Logga dina felrapporter med dessa tredjepartsloggningspaket

Du måste logga några fel för senare granskningar, felsökning och andra åtgärder under din applikationsutvecklingsprocess. Du kan använda zap paket av Uber-, Logrus-, Zerolog- och Log15-paket för snabb, strukturerad loggning.