Hoe om te gaan met fouten in Golang?

Hoe Om Te Gaan Met Fouten In Golang



Go is een populaire programmeertaal die in populariteit is gegroeid vanwege zijn effectiviteit, snelheid en efficiëntie. Er kunnen echter fouten optreden tijdens de ontwikkelings- en uitvoeringsfase, net als bij elke andere programmeertaal. Het effectief afhandelen van fouten is essentieel om de betrouwbaarheid en stabiliteit van uw Go-programma's te waarborgen.

Dit artikel onderzoekt verschillende methoden en aanbevolen procedures voor het beheren van fouten in Go.







Behandel fouten in Golang

In Go kan dat omgaan met fouten via de onderstaande methoden:



1: Nieuwe() Functie

De Go-taal biedt de Nieuw() functie om fouten te beheren. Deze functie, beschikbaar in het ingebouwde foutenpakket, stelt ontwikkelaars in staat aangepaste foutmeldingen voor hun programma's te maken. Door gebruik te maken van de Nieuw() functie kunnen ontwikkelaars fouten effectief afhandelen en gebruikers zinvolle foutmeldingen geven.



pakket belangrijkste

importeren 'fouten'
importeren 'fmt'

functiecontrole ( naamreeks ) fout {
nError := errors.Nieuw ( 'Ongeldige naam' )
als naam ! = 'Linux' {
opbrengst nFout
}
opbrengst nihil
}
func hoofd ( ) {
naam := 'Linux'
fout := controleer ( naam )
als fout ! = nihil {
fmt.Println ( fout )
} anders {
fmt.Println ( 'Geldige naam' )
}
}





De bovenstaande code maakt gebruik van de Nieuw() checkNaam functie om te zien of de string Linux komt overeen met de opgegeven naam. De functie produceert een fout met het bericht Ongeldige naam als de naam niet is Linux . De functie retourneert nul om aan te tonen dat er geen fout is opgetreden als de naam gelijk is aan Linux .

De naamvariabele is ingesteld op Linux in de aanroep van de hoofdfunctie naar de checkNaam functie, die ook de naamvariabele als argument meeneemt. De hoofdfunctie drukt de foutmelding af als de checkNaam functie retourneert een fout. De hoofdfunctie drukt de Geldige naam als de checkNaam functie retourneert nul.



Uitgang

2: Errorf() Functie

De Foutf() functie in Go stelt ons in staat om ook fouten af ​​te handelen. Foutf() geeft ons de mogelijkheid om de foutmelding te formatteren. Door het fmt-pakket te importeren, kunnen ontwikkelaars het gebruiken om foutmeldingen aan te passen aan hun behoeften. Foutf() stroomlijnt en verbetert de efficiëntie van het beheren en overbrengen van fouten in Go.

pakket belangrijkste
importeren 'fmt'

funk div ( n1, n2 jij ) fout {

als n2 == 0 {
opbrengst fmt.Fout ( '%d / %d \N Kan een getal niet delen door nul' , n1, n2 )
}
opbrengst nihil
}
func hoofd ( ) {
fout := div ( 42 , 0 )
als fout ! = nihil {
fmt.Printf ( 'fout: %s' , fout )
} anders {
fmt.Println ( 'Geldige divisie' )
}
}

In de bovenstaande code is de div De functie accepteert twee integer-invoeren, n1 en n2, en als n2 nul is, produceert het een fout. De functie produceert een fout met een bericht dat de waarden van n1 en n2 bevat als n2 nul is. De functie retourneert nul om aan te tonen dat er geen fout is opgetreden als n2 niet nul is.

De fout die div retourneert, wordt opgeslagen in de err-variabele wanneer de hoofdfunctie div uitvoert met de waarden 42 en 0. De hoofdfunctie gebruikt fmt.Printf om het foutbericht weer te geven als de div-functie een fout retourneert. De hoofdfunctie drukt af Geldige divisie als de div-functie nul retourneert.

Uitgang

3: Expliciete foutafhandeling

Go moedigt expliciet foutenbeheer aan in vergelijking met andere programmeertalen, die vaak afhankelijk zijn van uitzonderingen. Deze aanpak moedigt ontwikkelaars aan om if-statements te gebruiken om expliciet op fouten te controleren, in plaats van te vertrouwen op try-catch-blokken. Hierdoor is de kans groter dat fouten worden gevonden en correct worden verholpen. Om dit te vergemakkelijken, biedt Go de als err != nihil statement, waarmee ontwikkelaars kunnen controleren op fouten na het uitvoeren van een functie en passende acties kunnen ondernemen op basis van het resultaat. Met expliciete foutafhandeling biedt Go een meer gestructureerde en betrouwbare benadering van foutbeheer.

pakket belangrijkste
importeren 'fmt'

functie verdelen ( a, b vlotter64 ) ( float64, fout ) {
als b == 0 {
opbrengst 0 , fmt.Fout ( 'kan niet delen door nul' )
}
opbrengst A / b, nihil
}
func hoofd ( ) {
resultaat, err := delen ( 13 , 3 )
als fout ! = nihil {
fmt.Printf ( 'Fout: %v \N ' , fout )
} anders {
fmt.Printf ( 'Resultaat: %f \N ' , resultaat )
}
resultaat, err = delen ( 23 , 0 )
als fout ! = nihil {
fmt.Printf ( 'Fout: %v \N ' , fout )
} anders {
fmt.Printf ( 'Resultaat: %f \N ' , resultaat )
}
}

In deze illustratie wordt de deelfunctie gebruikt om twee waarden te delen. De output is het resultaat hiervan. Als het tweede getal 0 is, produceert de functie een fout met een duidelijk foutbericht.

Delen wordt twee keer aangeroepen in de hoofdfunctie: één keer met geldige invoer en één keer met ongeldige invoer. De, als err != nihil statement wordt gebruikt om te bepalen of er een fout is opgetreden telkens wanneer de delingsfunctie wordt gebruikt. Er wordt een foutmelding afgedrukt als er een optreedt. Zo niet, dan wordt de uitkomst afgedrukt.

Uitgang

4: Uitstel, paniek en herstel

Golang biedt ook de verschuiven instructie, die wordt gebruikt om een ​​functie uit te voeren na voltooiing van een programma of een specifiek codeblok. De verschuiven verklaring wordt vaak gebruikt in combinatie met de herstellen functie om runtime paniekfouten op te vangen en te herstellen. Wanneer er een runtime panic-fout optreedt, wordt het herstellen functie wordt gebruikt om te herstellen van de foutconditie en te voorkomen dat het programma vastloopt. Dit is handig voor opschoontaken zoals het sluiten van bestanden, het sluiten van netwerkverbindingen of het vrijgeven van bronnen. Door deze taken uit te stellen, zorgt u ervoor dat ze worden uitgevoerd, zelfs als er een fout optreedt.

De paniek wordt gebruikt om de normale uitvoering van het programma te stoppen wanneer er een onverwachte fout optreedt, terwijl herstellen wordt gebruikt om de paniek af te handelen en de uitvoering van het programma voort te zetten.

pakket belangrijkste

importeren 'fmt'

func herstel van paniek ( ) {
als r := herstellen ( ) ; R ! = nihil {
fmt.Println ( 'Hersteld van paniek:' , R )
}
}
functie verdelen ( x,y zweven64 ) vlotter64 {
herstel van paniek uitstellen ( )

als en == 0 {
paniek ( 'kan niet delen door nul' )
}
opbrengst X / En
}
func hoofd ( ) {
fmt.Println ( verdeling ( 13 , 3 ) )
fmt.Println ( verdeling ( 23 , 0 ) )
}

In de bovenstaande code wordt de deelfunctie gebruikt om twee drijvende-kommawaarden te delen. De output is het resultaat hiervan. Een aangepast foutbericht wordt uitgevoerd door de functie als het tweede getal nul is. De defer-instructie wordt gebruikt om de herstellen van paniek functie. De herstellen van paniek functie zal een paniek detecteren die is opgetreden binnen de delingsfunctie en een fout afdrukken als dit is gebeurd.

Delen wordt twee keer aangeroepen in de hoofdfunctie: één keer met geldige invoer en één keer met ongeldige invoer. De fmt.Println functie drukt de uitvoer van de functie af elke keer dat de delingsfunctie wordt uitgevoerd. De herstellen van paniek functie zal paniek detecteren als dit gebeurt en een fout afdrukken als dit het geval is.

Uitgang

Na het detecteren van de fout herstelde het programma zich van de paniek en bleef het draaien. De code raakte echter in paniek en retourneerde geen waarde bij de tweede aanroep om te delen, daarom retourneerde het nul.

5: Foutterugloop

Go bevat ook een functie die bekend staat als Fout bij het verpakken , waarmee u extra context aan een foutmelding kunt toevoegen. Dit is handig voor het vastleggen van problemen of het verstrekken van meer details in foutmeldingen. Dit kan worden bereikt door een fouttype te maken dat de oorspronkelijke fout en aanvullende context insluit.

pakket belangrijkste

importeren 'fouten'
importeren 'fmt'

func hoofd ( ) {
als err := balk ( ) ; fout ! = nihil {
fmt.Println ( fout )
}
}
functie verdelen ( a, b vlotter64 ) ( float64, fout ) {
als b == 0 {
opbrengst 0 , fouten.Nieuw ( 'deling door nul' )
}
opbrengst A / b, nihil
}
func-balk ( ) ( fout fout ) {
_, err = delen ( 42 , 0 )
als fout ! = nihil {
opbrengst fmt.Fout ( 'kan niet berekenen: %w' , fout )
}
opbrengst nihil
}

In de bovenstaande code berekent de deelfunctie de verhouding van twee getallen in dit voorbeeld en genereert een fout als de tweede waarde nul is. De bar-functie roept de divide-functie aan en verpakt vervolgens de fout die verdeling retourneert een nieuwe fout met een bericht dat het oorspronkelijke foutbericht bevat met behulp van de functie fmt.Errorf. De balkfunctie wordt aangeroepen door de hoofdfunctie, die ook eventuele fouten afdrukt.

Uitgang

Conclusie

Softwareontwikkeling moet omvatten foutafhandeling , en Golang heeft verschillende ingebouwde functies en methoden om dit gracieus te doen. Met deze mechanismen kunnen ontwikkelaars fouten opsporen en herstellen, crashes van programma's voorkomen en informatieve foutmeldingen aan eindgebruikers geven. Door deze foutafhandelingsmechanismen effectief te gebruiken, kunnen ontwikkelaars robuuste, betrouwbare en efficiënte softwaretoepassingen bouwen.