Sobes.tech
Junior — Middle

Կարո՞ղ եք բռնել և կառավարել панիկաները defer-ի ներսում Go-ում:

sobes.tech AI

Պատասխան AI-ից

Go լեզվում կարող եք օգտագործել defer՝ panic-ների կառավարելու համար, բայց defer-ի կանչը ինքնին չի բռնում panic-ը; այն պետք է բռնվի recover()-ի միջոցով defer-ով հետաձգված ֆունկցիայի ներսում:

Օրինակ՝

func safeCall() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Panika բռնվեց և մշակվեց:", r)
        }
    }()
    panic("ինչ-որ բան սխալ է գնացել")
}

Այստեղ recover()-ը կանչվում է defer-ով հետաձգված ֆունկցիայի ներսում և թույլ է տալիս բռնել safeCall-ում առաջացած panic-ը: Այսպիսով, panic-ները հնարավոր չէ ուղղակիորեն բռնել defer-ում, բայց կարելի է մշակել դրանց recover()-ի միջոցով։