Waɗannan kalmomi uku suna gudanarwa da jinkirin aiki da yanayin kuɗuri. defer yana shirya tsaftace-tsaftace, panic yana bugi bugi na lokaci-lokaci (ga tabbataccen yanayin kuɗuri), da recover zai iya kama panic don kawar da canjin programin.
Waɗannan kalmomi uku suna gudanarwa da jinkirin aiki da yanayin kuɗuri. defer yana shirya tsaftace-tsaftace, panic yana bugi bugi na lokaci-lokaci (ga tabbataccen yanayin kuɗuri), da recover zai iya kama panic don kawar da canjin programin.
func readFile() error {
f, err := os.Open("file.txt")
if err != nil { return err }
defer f.Close() // GUARANTEED to run when readFile returns (any path)
// ... use f, with multiple return points ...
return nil // f.Close() runs here automatically
}
defer yana shirya kiran aikin don aiwatarwa yayin da aikin da yake kewaye ya dawo — ba wai yadda ya dawo ba (dawo na yau da kullun, kuɗi, ko panic). Shi ne ilmanin hanyar don tabbatar da tsaftace-tsaftace: rufewa fayilai, buɗe haɗi, rufewa haɗi — sai a aje shi kusa da karbar don kada mu manta.
defer fmt.Println("1")
defer fmt.Println("2")
defer fmt.Println("3")
// prints: 3, 2, 1 — last deferred, first executed (stack order)
func mustPositive(n int) {
if n < 0 {
panic("negative not allowed") // stops normal execution, unwinds the stack
}
}
// panic runs deferred functions as it unwinds, then crashes the program (with a stack trace)
panic yana tsayar da jinkirin yau da kullun da kuma buɓuɓɓuɓe stack na kira (aiwatar da ayyukan deferredai a halin da ake tafiya), a ƙarshe bugi programin. Shi ne don kuskuren ƙodubomawa / yanayin maƙaryaci (waje-na-limit, nil ƙowaƙo, yanayin ba-yiwon) — BA don bayyananniyar kuɗi (waɗannan suna amfani da error ƙimomi masu dawo).
func safeProcess() {
defer func() {
if r := recover(); r != nil { // recover() returns the panic value
fmt.Println("recovered from:", r) // handle it; program continues
}
}()
panic("something broke") // this panic is caught by the recover above
}
// safeProcess returns normally instead of crashing
recover yana dawo wa'adin goroutine na panic — amma kawai yana aiki a cikin aikin da aka ƙetare. Ana amfanin shi sosai, misali don dakatar da hannu daya na aikace-aikace daga bugi gida.
Normal/expected failures (file missing, bad input, validation) → return an error value
panic/recover → reserve for TRULY exceptional cases (bugs, unrecoverable states)
and boundaries (e.g. a server recovering so one bad request doesn't kill the process)
defer shine mahimmacin, ilmanin feature na Go don tabbataccen tsaftace-tsaftace — sai a aje warere na resource kusa da karbar da tabbatar cewa yana gudu akan kowane hanya ta dawo (gaba da panic), wanda yake kawar da fayilai masu rashin amfani, haɗi, da hanyoyin bambanci sosai mai inganci fiye da tsaftacewa ta hannu.
Fahimtar tsarin LIFO na sa'a jiya muhimmi ne. panic/recover suna samar da karkarawar ban-ban, amma ka'idar mahimmi shine Go ya ajiye su don ainiyin kuɗuri masu sauya-sauyai, maƙaryaci — bayyananniyar kuɗi yakamata a dawo a matsayin ƙimomi kuma a dubawa.
Aminaciwa panic/recover azaman sarrafa sakamakawa gaba iye ba-ilmanin hanyar kuma kuskure na ba'a ga masu fito daga harsunan sakamakawa.
Sanin lokaci da za'a amfani da defer (koyaushe, don tsaftace), error dawo (rashin nasara na yau da kullun), da panic/recover (aƴara, kuɗuri, ko a iyaka) shine tushe ga rubta da ilmanin Go da kuma baban jira na karantarwa.