Hur hanterar man fel i Golang?

Hur Hanterar Man Fel I Golang



Go är ett omtyckt programmeringsspråk som har vuxit i popularitet på grund av dess effektivitet, hastighet och effektivitet. Däremot kan misstag inträffa under utvecklings- och exekveringsfaserna, precis som med alla andra programmeringsspråk. Att hantera fel effektivt är viktigt för att säkerställa tillförlitligheten och stabiliteten hos dina Go-program.

Den här artikeln kommer att undersöka flera metoder och rekommenderade procedurer för att hantera fel i Go.







Hantera fel i Golang

I Go kan du hantera fel genom de nedan nämnda metoderna:



1: New() Funktion

Go-språket tillhandahåller Ny() funktion för att hantera fel. Denna funktion, tillgänglig i det inbyggda felpaketet, gör det möjligt för utvecklare att skapa anpassade felmeddelanden för sina program. Genom att använda Ny() funktion kan utvecklare hantera fel effektivt och ge meningsfulla felmeddelanden till användarna.



huvudpaketet

importera 'fel'
importera 'fmt'

funktionskontroll ( namnsträng ) fel {
nError := errors.New ( 'Ogiltigt namn' )
om namn ! = 'Linux' {
lämna tillbaka nFel
}
lämna tillbaka noll
}
func huvud ( ) {
namn := 'Linux'
fel := kolla ( namn )
om fela ! = noll {
fmt.Println ( fela )
} annan {
fmt.Println ( 'Giltigt namn' )
}
}





Ovanstående kod använder Ny() checkName funktion för att se om strängen Linux matchar det angivna namnet. Funktionen ger ett fel med meddelandet Ogiltigt namn om namnet inte är det Linux . Funktionen returnerar noll för att visa att det inte fanns något fel om namnet är lika med Linux .

Namnvariabeln är inställd på Linux i huvudfunktionens anrop till checkName funktion, som också tar namnvariabeln som ett argument. Huvudfunktionen skriver ut felmeddelandet om checkName funktion returnerar ett fel. Huvudfunktionen skriver ut Giltigt namn om checkName funktion returnerar noll.



Produktion

2: Errorf() Funktion

De Errorf() funktion i Go gör att vi också kan hantera fel. Errorf() ger oss möjlighet att formatera felmeddelandet. Genom att importera fmt-paketet kan utvecklare använda det för att anpassa felmeddelanden för att passa deras behov. Errorf() effektiviserar och förbättrar effektiviteten i att hantera och förmedla fel i Go.

huvudpaketet
importera 'fmt'

func div ( n1, n2 du ) fel {

om n2 == 0 {
lämna tillbaka fmt.Errorf ( '%d / %d \n Kan inte dividera ett tal med noll' n1, n2 )
}
lämna tillbaka noll
}
func huvud ( ) {
fel := div ( 42 , 0 )
om fela ! = noll {
fmt.Printf ( 'fel: %s' , fel )
} annan {
fmt.Println ( 'Giltig division' )
}
}

I ovanstående kod är div Funktionen accepterar två heltalsingångar, n1 och n2, och om n2 är noll ger den ett fel. Funktionen ger ett fel med ett meddelande som innehåller värdena n1 och n2 om n2 är noll. Funktionen returnerar noll för att visa att det inte fanns något fel om n2 inte är noll.

Felet som div returnerar sparas i err-variabeln när huvudfunktionen kör div med värdena 42 och 0. Huvudfunktionen använder fmt.Printf för att visa felmeddelandet om div-funktionen returnerar ett fel. Huvudfunktionen skriver ut Giltig division om div-funktionen returnerar noll.

Produktion

3: Explicit felhantering

Go uppmuntrar explicit felhantering jämfört med andra programmeringsspråk, som ofta förlitar sig på undantag. Detta tillvägagångssätt uppmuntrar utvecklare att använda if-satser för att explicit leta efter fel, istället för att förlita sig på försök-fångst-block. Genom att göra detta är det mer sannolikt att fel hittas och åtgärdas korrekt. För att underlätta detta tillhandahåller Go om fel != noll uttalande, som gör det möjligt för utvecklare att leta efter fel efter att ha kört en funktion och vidta lämpliga åtgärder baserat på resultatet. Med explicit felhantering erbjuder Go en mer strukturerad och tillförlitlig metod för felhantering.

huvudpaketet
importera 'fmt'

funktionsdelning ( a, b flyta64 ) ( float64, fel ) {
om b == 0 {
lämna tillbaka 0 , fmt.Errorf ( 'kan inte dividera med noll' )
}
lämna tillbaka a / b, noll
}
func huvud ( ) {
resultat, fel := dividera ( 13 , 3 )
om fela ! = noll {
fmt.Printf ( 'Fel: %v \n ' , fel )
} annan {
fmt.Printf ( 'Resultat: %f \n ' , resultat )
}
resultat, fel = dividera ( 23 , 0 )
om fela ! = noll {
fmt.Printf ( 'Fel: %v \n ' , fel )
} annan {
fmt.Printf ( 'Resultat: %f \n ' , resultat )
}
}

I den här illustrationen används divideringsfunktionen för att dela två värden. Resultatet är resultatet av att göra det. Om den andra siffran är 0, ger funktionen ett fel med ett distinkt felmeddelande.

Divide anropas två gånger i huvudfunktionen: en gång med giltiga inmatningar och en gång med ogiltig input. Den, om fel != noll sats används för att avgöra om ett fel inträffade varje gång divisionsfunktionen används. Ett felmeddelande skrivs ut om ett sådant inträffar. Om inte, skrivs resultatet ut.

Produktion

4: Defer, Panic, and Recover

Golang tillhandahåller också uppskjuta sats, som används för att exekvera en funktion efter att ett program eller ett specifikt kodblock har slutförts. De uppskjuta uttalande används ofta i samband med ta igen sig funktion för att fånga och återställa från runtime panikfel. När ett runtime panikfel uppstår, ta igen sig funktionen används för att återställa från feltillståndet och förhindra att programmet kraschar. Detta är användbart för rensningsuppgifter som att stänga filer, stänga nätverksanslutningar eller frigöra resurser. Genom att skjuta upp dessa uppgifter säkerställer du att de utförs även om ett fel uppstår.

De panik används för att stoppa den normala körningen av programmet när ett oväntat fel inträffar, medan ta igen sig används för att hantera paniken och fortsätta körningen av programmet.

huvudpaketet

importera 'fmt'

func recoverFromPanic ( ) {
om r := återhämta sig ( ) ; r ! = noll {
fmt.Println ( 'Återhämtad från panik:' , r )
}
}
funktionsdelning ( x,y float64 ) flyta64 {
defer recoverFromPanic ( )

om och == 0 {
panik ( 'kan inte dividera med noll' )
}
lämna tillbaka x / och
}
func huvud ( ) {
fmt.Println ( dela upp ( 13 , 3 ) )
fmt.Println ( dela upp ( 23 , 0 ) )
}

I koden ovan används divideringsfunktionen för att dela två flyttalsvärden. Resultatet är resultatet av att göra det. Ett anpassat felmeddelande matas ut av funktionen om den andra siffran är noll. Defer-satsen används för att åberopa recoverFromPanic fungera. De recoverFromPanic funktionen kommer att upptäcka en panik som inträffade i divisionsfunktionen och skriva ut ett felmeddelande om det inträffade.

Divide anropas två gånger i huvudfunktionen: en gång med giltiga inmatningar och en gång med ogiltig input. De fmt.Println funktion skriver ut funktionens utdata varje gång divisionsfunktionen körs. De recoverFromPanic funktionen kommer att upptäcka en panik om den inträffar och skriva ut ett felmeddelande om den gör det.

Produktion

Efter att ha upptäckt felet återhämtade sig programmet från paniken och fortsatte att köra. Koden fick dock panik och returnerade inget värde vid det andra anropet att dividera, vilket är anledningen till att den returnerade noll.

5: Fel vid inslagning

Go innehåller också en funktion som kallas Fel vid inslagning , som låter dig lägga till ytterligare sammanhang till ett felmeddelande. Detta är användbart för att registrera problem eller ge ytterligare information i felmeddelanden. Detta kan åstadkommas genom att skapa en feltyp som bäddar in det ursprungliga felet och ytterligare sammanhang.

huvudpaketet

importera 'fel'
importera 'fmt'

func huvud ( ) {
om fel := bar ( ) ; fela ! = noll {
fmt.Println ( fela )
}
}
funktionsdelning ( a, b flyta64 ) ( float64, fel ) {
om b == 0 {
lämna tillbaka 0 , fel.Ny ( 'dividera med noll' )
}
lämna tillbaka a / b, noll
}
func bar ( ) ( fel fel ) {
_, fela = dividera ( 42 , 0 )
om fela ! = noll {
lämna tillbaka fmt.Errorf ( 'misslyckades med att beräkna: %w' , fel )
}
lämna tillbaka noll
}

I koden ovan beräknar divideringsfunktionen förhållandet mellan två tal i detta exempel och ger ett fel om det andra värdet är noll. Barfunktionen anropar dividerfunktionen och lindar sedan felet som dela upp returnerar i ett nytt fel med ett meddelande som innehåller det ursprungliga felmeddelandet med funktionen fmt.Errorf. Barfunktionen anropas av huvudfunktionen, som även skriver ut eventuella fel den returnerar.

Produktion

Slutsats

Mjukvaruutveckling ska innehålla felhantering , och Golang har olika inbyggda funktioner och metoder för att göra det på ett elegant sätt. Dessa mekanismer tillåter utvecklare att fånga upp och återställa fel, förhindra programkrascher och tillhandahålla informativa felmeddelanden till slutanvändare. Genom att använda dessa felhanteringsmekanismer effektivt kan utvecklare bygga robusta, pålitliga och effektiva programvaruapplikationer.