Kako ravnati z napakami v Golangu?

Kako Ravnati Z Napakami V Golangu



Go je zelo priljubljen programski jezik, ki je postal priljubljen zaradi svoje učinkovitosti, hitrosti in učinkovitosti. Vendar pa se lahko zgodijo napake v fazi razvoja in izvajanja, tako kot pri katerem koli drugem programskem jeziku. Učinkovito obravnavanje napak je bistvenega pomena za zagotavljanje zanesljivosti in stabilnosti vaših programov Go.

Ta članek bo preučil več metod in priporočenih postopkov za upravljanje napak v Go.







Obravnavajte napake v Golangu

V Go lahko obravnavati napake s pomočjo spodaj navedenih metod:



1: funkcija New().

Jezik Go zagotavlja novo() funkcijo za upravljanje napak. Ta funkcija, ki je na voljo v vgrajenem paketu napak, omogoča razvijalcem, da ustvarijo sporočila o napakah po meri za svoje programe. Z uporabo novo() lahko razvijalci učinkovito obravnavajo napake in uporabnikom zagotovijo smiselna sporočila o napakah.



glavni paket

uvoz 'napake'
uvoz 'fmt'

preverjanje func ( imenski niz ) napaka {
nError := napake. Novo ( 'Neveljavno ime' )
če ime ! = 'Linux' {
vrnitev nNapaka
}
vrnitev nič
}
glavna funkcija ( ) {
ime := 'Linux'
napaka := preveri ( ime )
če napaka ! = nič {
fmt.Println ( napaka )
} drugače {
fmt.Println ( 'Veljavno ime' )
}
}





Zgornja koda uporablja novo() checkName funkcijo, da preverite, ali niz Linux se ujema z navedenim imenom. Funkcija ustvari napako s sporočilom Neveljavno ime če ime ni Linux . Funkcija vrne nič, da pokaže, da ni prišlo do napake, če je ime enako Linux .

Spremenljivka imena je nastavljena na Linux v klicu glavne funkcije na checkName funkcijo, ki spremenljivko ime sprejme tudi kot argument. Glavna funkcija natisne sporočilo o napaki, če je checkName funkcija vrne napako. Glavna funkcija natisne Veljavno ime če je checkName funkcija vrne nič.



Izhod

2: Funkcija Errorf().

The Errorf() funkcija v Go nam omogoča tudi obravnavo napak. Errorf() nam daje možnost oblikovanja sporočila o napaki. Z uvozom paketa fmt ga lahko razvijalci uporabijo za prilagajanje sporočil o napakah svojim potrebam. Errorf() poenostavi in ​​izboljša učinkovitost upravljanja in posredovanja napak v Go.

glavni paket
uvoz 'fmt'

func div ( n1, n2 ti ) napaka {

če n2 == 0 {
vrnitev fmt.Errorf ( '%d / %d \n Številke ni mogoče deliti z ničlo' , n1, n2 )
}
vrnitev nič
}
glavna funkcija ( ) {
napaka := div ( 42 , 0 )
če napaka ! = nič {
fmt.Printf ( 'napaka: %s' , napaka )
} drugače {
fmt.Println ( 'Veljavna delitev' )
}
}

V zgornji kodi je div funkcija sprejme dva cela vhoda, n1 in n2, in če je n2 nič, povzroči napako. Funkcija ustvari napako s sporočilom, ki vsebuje vrednosti n1 in n2, če je n2 nič. Funkcija vrne nič, da pokaže, da ni prišlo do napake, če n2 ni nič.

Napaka, ki jo vrne div, se shrani v spremenljivko err, ko glavna funkcija zažene div z vrednostma 42 in 0. Glavna funkcija uporablja fmt.Printf za prikaz sporočila o napaki, če funkcija div vrne napako. Glavna funkcija natisne Veljavna delitev če funkcija div vrne nič.

Izhod

3: Eksplicitna obravnava napak

Go spodbuja eksplicitno upravljanje napak v primerjavi z drugimi programskimi jeziki, ki se pogosto zanašajo na izjeme. Ta pristop spodbuja razvijalce k uporabi stavkov if za izrecno preverjanje napak, namesto da bi se zanašali na bloke try-catch. S tem je večja verjetnost, da bodo napake odkrite in ustrezno odpravljene. Da bi to olajšal, Go ponuja če je napaka != nič stavek, ki razvijalcem omogoča, da po izvedbi funkcije preverijo napake in na podlagi rezultata izvedejo ustrezna dejanja. Z eksplicitnim obravnavanjem napak ponuja Go bolj strukturiran in zanesljiv pristop k upravljanju napak.

glavni paket
uvoz 'fmt'

func deliti ( a, b float64 ) ( float64, napaka ) {
če b == 0 {
vrnitev 0 , fmt.Errorf ( 'ni mogoče deliti z ničlo' )
}
vrnitev a / b, nič
}
glavna funkcija ( ) {
rezultat, napaka := deli ( 13 , 3 )
če napaka ! = nič {
fmt.Printf ( 'Napaka: %v \n ' , napaka )
} drugače {
fmt.Printf ( 'Rezultat: %f \n ' , rezultat )
}
rezultat, err = deliti ( 23 , 0 )
če napaka ! = nič {
fmt.Printf ( 'Napaka: %v \n ' , napaka )
} drugače {
fmt.Printf ( 'Rezultat: %f \n ' , rezultat )
}
}

Na tej sliki se funkcija deljenja uporablja za deljenje dveh vrednosti. Rezultat je rezultat tega početja. Če je drugo število 0, funkcija ustvari napako z ločenim sporočilom o napaki.

Funkcija Divide se v glavni funkciji kliče dvakrat: enkrat z veljavnimi vnosi in enkrat z neveljavnimi vnosi. The, če napaka != nič stavek se uporablja za ugotavljanje, ali je prišlo do napake vsakič, ko je uporabljena funkcija deljenja. Če se pojavi sporočilo o napaki, se natisne. Če ni, se izid natisne.

Izhod

4: Odloži, prestraši se in si opomore

Golang ponuja tudi odložiti stavek, ki se uporablja za izvajanje funkcije po zaključku programa ali določenega bloka kode. The odložiti izjava se pogosto uporablja v povezavi z okrevati funkcijo za lovljenje in okrevanje po paničnih napakah med izvajanjem. Ko se pojavi panična napaka med izvajanjem, se okrevati funkcija se uporablja za obnovitev stanja napake in preprečevanje zrušitve programa. To je uporabno za opravila čiščenja, kot je zapiranje datotek, zapiranje omrežnih povezav ali sprostitev virov. Z odlogom teh nalog zagotovite, da se izvedejo, tudi če pride do napake.

The panika se uporablja za zaustavitev običajnega izvajanja programa, ko pride do nepričakovane napake, medtem ko okrevati se uporablja za obvladovanje panike in nadaljevanje izvajanja programa.

glavni paket

uvoz 'fmt'

func recoverFromPanic ( ) {
če r := obnoviti ( ) ; r ! = nič {
fmt.Println ( 'Ozdravljen od panike:' , r )
}
}
func deliti ( x,y float64 ) float64 {
odloži recoverFromPanic ( )

če in == 0 {
panika ( 'ni mogoče deliti z ničlo' )
}
vrnitev x / in
}
glavna funkcija ( ) {
fmt.Println ( razdeliti ( 13 , 3 ) )
fmt.Println ( razdeliti ( 23 , 0 ) )
}

V zgornji kodi se funkcija deljenja uporablja za deljenje dveh vrednosti s plavajočo vejico. Rezultat je rezultat tega početja. Funkcija prikaže prilagojeno sporočilo o napaki, če je druga številka nič. Izjava defer se uporablja za priklic recoverFromPanic funkcijo. The recoverFromPanic bo zaznala paniko, ki se je zgodila znotraj funkcije delitve, in natisnila napako, če se je zgodila.

Funkcija Divide se v glavni funkciji kliče dvakrat: enkrat z veljavnimi vnosi in enkrat z neveljavnimi vnosi. The fmt.Println funkcija natisne izhod funkcije vsakič, ko se zažene funkcija deljenja. The recoverFromPanic funkcija zazna paniko, če se zgodi, in natisne napako, če se zgodi.

Izhod

Po zaznavi napake si je program opomogel od panike in nadaljeval z delovanjem. Vendar se je koda prestrašila in ob drugem klicu deljenja ni vrnila vrednosti, zato je vrnila nič.

5: Ovijanje napak

Go vključuje tudi funkcijo, znano kot Napaka pri zavijanju , ki vam omogoča, da sporočilu o napaki dodate dodaten kontekst. To je koristno za beleženje težav ali zagotavljanje dodatnih podrobnosti v sporočilih o napakah. To je mogoče doseči z ustvarjanjem vrste napake, ki vdela izvirno napako in dodatni kontekst.

glavni paket

uvoz 'napake'
uvoz 'fmt'

glavna funkcija ( ) {
če napaka := vrstica ( ) ; napaka ! = nič {
fmt.Println ( napaka )
}
}
func deliti ( a, b float64 ) ( float64, napaka ) {
če b == 0 {
vrnitev 0 , napake.Novo ( 'deljenje z ničlo' )
}
vrnitev a / b, nič
}
func bar ( ) ( napaka napaka ) {
_, napaka = deliti ( 42 , 0 )
če napaka ! = nič {
vrnitev fmt.Errorf ( 'ni uspelo izračunati: %w' , napaka )
}
vrnitev nič
}

V zgornji kodi funkcija deljenja izračuna razmerje dveh števil v tem primeru in vrže napako, če je druga vrednost nič. Funkcija vrstice pokliče funkcijo delitve in nato ovije napako, ki jo razdeliti vrne novo napako s sporočilom, ki vključuje prvotno sporočilo o napaki z uporabo funkcije fmt.Errorf. Funkcijo vrstice pokliče glavna funkcija, ki tudi natisne vse napake, ki jih vrne.

Izhod

Zaključek

Razvoj programske opreme mora vključevati obravnavanje napak , Golang pa ima različne vgrajene funkcije in metode za to elegantno početje. Ti mehanizmi omogočajo razvijalcem, da odkrijejo napake in jih obnovijo, preprečijo zrušitve programa in končnim uporabnikom zagotovijo informativna sporočila o napakah. Z učinkovito uporabo teh mehanizmov za obravnavo napak lahko razvijalci zgradijo robustne, zanesljive in učinkovite programske aplikacije.