Kuinka käsitellä virheitä Golangissa?

Kuinka Kasitella Virheita Golangissa



Go on suosittu ohjelmointikieli, jonka suosio on kasvanut tehokkuutensa, nopeudensa ja tehokkuutensa ansiosta. Virheitä voi kuitenkin tapahtua kehitys- ja suoritusvaiheessa, aivan kuten minkä tahansa muun ohjelmointikielen kanssa. Virheiden tehokas käsittely on välttämätöntä Go-ohjelmien luotettavuuden ja vakauden varmistamiseksi.

Tässä artikkelissa tarkastellaan useita menetelmiä ja suositeltuja menettelytapoja Go-virheiden hallintaan.







Käsittele virheet Golangissa

Gossa voit käsitellä virheitä alla mainituilla menetelmillä:



1: Uusi()-funktio

Go-kieli tarjoaa Uusi() toiminto virheiden hallintaan. Tämä toiminto, joka on saatavilla sisäänrakennetussa virhepaketissa, antaa kehittäjille mahdollisuuden luoda mukautettuja virheilmoituksia ohjelmilleen. Hyödyntämällä Uusi() toiminnon avulla kehittäjät voivat käsitellä virheitä tehokkaasti ja antaa käyttäjille merkityksellisiä virheilmoituksia.



pääpaketti

tuonti 'virheet'
tuonti 'fmt'

toimintojen tarkistus ( nimimerkkijono ) virhe {
nError := errors.New ( 'Epäkelpo nimi' )
jos nimi ! = 'Linux' {
palata virhe
}
palata nolla
}
func main ( ) {
nimi := 'Linux'
err := tarkista ( nimi )
jos err ! = nolla {
fmt.Println ( err )
} muu {
fmt.Println ( 'Kyllä oleva nimi' )
}
}





Yllä oleva koodi käyttää Uusi() tarkistaNimi funktio nähdäksesi jos merkkijono Linux vastaa annettua nimeä. Toiminto tuottaa virheilmoituksen Epäkelpo nimi jos nimi ei ole Linux . Funktio palauttaa arvon nolla osoittaakseen, että virhettä ei tapahtunut, jos nimi on yhtä suuri kuin Linux .

Nimimuuttuja on asetettu arvoon Linux päätoiminnon kutsussa tarkistaNimi funktio, joka ottaa myös nimimuuttujan argumenttina. Päätoiminto tulostaa virheilmoituksen, jos tarkistaNimi funktio palauttaa virheen. Päätoiminto tulostaa Kelvollinen nimi jos tarkistaNimi funktio palauttaa nollan.



Lähtö

2: Errorf()-funktio

The Errorf() Go-toiminnon avulla voimme käsitellä myös virheitä. Errorf() antaa meille mahdollisuuden muotoilla virheilmoitus. Tuomalla fmt-paketin kehittäjät voivat käyttää sitä mukauttaakseen virheilmoituksia tarpeidensa mukaan. Errorf() virtaviivaistaa ja tehostaa Go-virheiden hallintaa ja välittämistä.

pääpaketti
tuonti 'fmt'

toiminto div ( n1, n2 sinä ) virhe {

jos n2 == 0 {
palata fmt.Errorf ( '%d / %d \n Lukua ei voi jakaa nollalla' , n1, n2 )
}
palata nolla
}
func main ( ) {
err := div ( 42 , 0 )
jos err ! = nolla {
fmt.Printf ( 'virhe: %s' , err )
} muu {
fmt.Println ( 'Voimassa osasto' )
}
}

Yllä olevassa koodissa div funktio hyväksyy kaksi kokonaislukua, n1 ja n2, ja jos n2 on nolla, se tuottaa virheen. Funktio tuottaa virheen sanomalla, joka sisältää arvot n1 ja n2, jos n2 on nolla. Funktio palauttaa arvon nolla osoittaakseen, että virhettä ei tapahtunut, jos n2 ei ole nolla.

Divin palauttama virhe tallennetaan err-muuttujaan, kun pääfunktio suorittaa div arvoilla 42 ja 0. Pääfunktio näyttää virheilmoituksen komennolla fmt.Printf, jos div-funktio palauttaa virheen. Päätoiminto tulostaa Voimassa oleva osasto jos div-funktio palauttaa nollan.

Lähtö

3: Selkeä virheenkäsittely

Go kannustaa selkeään virheenhallintaan verrattuna muihin ohjelmointikieliin, jotka usein perustuvat poikkeuksiin. Tämä lähestymistapa rohkaisee kehittäjiä käyttämään if-lauseita virheiden tarkastamiseen sen sijaan, että luottaisivat try-catch-lohkoihin. Näin tekemällä virheet löydetään ja korjataan todennäköisemmin. Tämän helpottamiseksi Go tarjoaa jos err! = nolla lauseke, jonka avulla kehittäjät voivat tarkistaa virheet toiminnon suorittamisen jälkeen ja ryhtyä tarvittaviin toimiin tuloksen perusteella. Selkeällä virheenkäsittelyllä Go tarjoaa jäsennellymmän ja luotettavamman lähestymistavan virheiden hallintaan.

pääpaketti
tuonti 'fmt'

Func jako ( a, b float64 ) ( float64, virhe ) {
jos b == 0 {
palata 0 , fmt.Errorf ( 'ei voi jakaa nollalla' )
}
palata a / b, nolla
}
func main ( ) {
tulos, err := jako ( 13 , 3 )
jos err ! = nolla {
fmt.Printf ( 'Virhe: %v \n ' , err )
} muu {
fmt.Printf ( 'Tulos: %f \n ' , tulos )
}
tulos, err = jako ( 23 , 0 )
jos err ! = nolla {
fmt.Printf ( 'Virhe: %v \n ' , err )
} muu {
fmt.Printf ( 'Tulos: %f \n ' , tulos )
}
}

Tässä kuvassa jakofunktiota käytetään kahden arvon jakamiseen. Tuotos on tämän tekemisen tulos. Jos toinen luku on 0, funktio tuottaa virheen, jossa on selkeä virheilmoitus.

Divide kutsutaan päätoiminnossa kahdesti: kerran kelvollisilla syötteillä ja kerran kelvollisilla tuloilla. Jos err! = nolla lauseketta käytetään määrittämään, tapahtuiko virhe joka kerta kun jakotoimintoa käytetään. Jos sellainen ilmenee, tulostetaan virheilmoitus. Jos ei, tulos tulostetaan.

Lähtö

4: Lykkää, paniikki ja palautu

Golang tarjoaa myös lykätä lauseke, jota käytetään funktion suorittamiseen ohjelman tai tietyn koodilohkon jälkeen. The lykätä lausetta käytetään usein yhdessä lauseen kanssa toipua toiminto, joka ottaa kiinni ja toipua ajonaikaisista paniikkivirheistä. Kun ajonaikainen paniikkivirhe tapahtuu, toipua -toimintoa käytetään palautumaan virhetilasta ja estämään ohjelman kaatuminen. Tästä on hyötyä puhdistustehtävissä, kuten tiedostojen sulkemisessa, verkkoyhteyksien sulkemisessa tai resurssien vapauttamisessa. Lykkäämällä näitä tehtäviä varmistat, että ne suoritetaan, vaikka virhe tapahtuisi.

The paniikki käytetään pysäyttämään ohjelman normaali suorittaminen odottamattoman virheen sattuessa, kun toipua käytetään hallitsemaan paniikkia ja jatkamaan ohjelman suorittamista.

pääpaketti

tuonti 'fmt'

func recoveryFromPanic ( ) {
jos r := palautua ( ) ; r ! = nolla {
fmt.Println ( 'Paniikista toipunut:' , r )
}
}
Func jako ( x,y float64 ) kellua64 {
lykätä toipumistaPanicista ( )

jos ja == 0 {
paniikki ( 'ei voi jakaa nollalla' )
}
palata x / ja
}
func main ( ) {
fmt.Println ( jakaa ( 13 , 3 ) )
fmt.Println ( jakaa ( 23 , 0 ) )
}

Yllä olevassa koodissa jakofunktiota käytetään kahden liukulukuarvon jakamiseen. Tuotos on tämän tekemisen tulos. Toiminto lähettää mukautetun virheilmoituksen, jos toinen luku on nolla. Defer-lausetta käytetään kutsumaan toipuaPanicista toiminto. The toipuaPanicista toiminto havaitsee jakotoiminnon sisällä tapahtuneen paniikin ja tulostaa virheilmoituksen, jos se tapahtui.

Divide kutsutaan päätoiminnossa kahdesti: kerran kelvollisilla syötteillä ja kerran kelvollisilla tuloilla. The fmt.Println toiminto tulostaa funktion tulosteen aina, kun jakotoiminto suoritetaan. The toipuaPanicista toiminto havaitsee paniikin, jos se tapahtuu, ja tulostaa virheilmoituksen, jos se tapahtuu.

Lähtö

Virheen havaitsemisen jälkeen ohjelma toipui paniikkihäiriöstä ja jatkoi toimintaansa. Koodi kuitenkin paniikkiin eikä palauttanut arvoa toisella jakokutsulla, minkä vuoksi se palautti nollan.

5: Virhe kääreessä

Go sisältää myös ominaisuuden, joka tunnetaan nimellä Virhe kääreessä , jonka avulla voit lisätä virheilmoitukseen kontekstia. Tästä on apua ongelmien tallentamisessa tai lisätietojen antamisessa virheilmoituksissa. Tämä voidaan saavuttaa luomalla virhetyyppi, joka upottaa alkuperäisen virheen ja lisäkontekstin.

paketin pääasiallinen

tuonti 'virheet'
tuonti 'fmt'

func main ( ) {
jos err := baari ( ) ; err ! = nolla {
fmt.Println ( err )
}
}
Func jako ( a, b float64 ) ( float64, virhe ) {
jos b == 0 {
palata 0 , virheitä.Uutta ( 'nollalla jakaminen' )
}
palata a / b, nolla
}
toimintopalkki ( ) ( err virhe ) {
_, err = jakaa ( 42 , 0 )
jos err ! = nolla {
palata fmt.Errorf ( 'laskeminen epäonnistui: %w' , err )
}
palata nolla
}

Yllä olevassa koodissa jakofunktio laskee kahden luvun suhteen tässä esimerkissä ja antaa virheen, jos toinen arvo on nolla. Palkkifunktio kutsuu jakofunktiota ja rivittää sitten virheen jakaa palauttaa uudessa virheessä sanomalla, joka sisältää alkuperäisen virhesanoman käyttämällä fmt.Errorf-funktiota. Pääfunktio kutsuu palkkifunktiota, joka myös tulostaa palauttamansa virheet.

Lähtö

Johtopäätös

Ohjelmistokehityksen tulee sisältää virheiden käsittely , ja Golangissa on useita sisäänrakennettuja toimintoja ja menetelmiä, joilla voit tehdä sen kauniisti. Näiden mekanismien avulla kehittäjät voivat havaita virheitä ja toipua niistä, estää ohjelmien kaatumiset ja antaa informatiivisia virheilmoituksia loppukäyttäjille. Käyttämällä näitä virheenkäsittelymekanismeja tehokkaasti kehittäjät voivat rakentaa kestäviä, luotettavia ja tehokkaita ohjelmistosovelluksia.