Sobes.tech
Junior — Middle

შეგიძლიათ იპოვოთ და მართოთ პანიკა defer-ის შიგნით Go-ში?

sobes.tech AI

პასუხი AI-სგან

Go ენის ფარგლებში, შეგიძლიათ გამოიყენოთ defer პანიკის მართვისთვის, მაგრამ defer-ის ზარი თავად არ იჭერს პანიკას; პანიკა უნდა იჭრას recover()-ის საშუალებით defer-ით გადადებული ფუნქციის შიგნით.

მაგალითი:

func safeCall() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("პანიკა იჭერა და დამუშავდა:", r)
        }
    }()
    panic("რაღაც მოხდა ცუდად")
}

აქ, recover() იძახება defer-ით გადადებული ფუნქციის შიგნით და საშუალებას აძლევს იჭრას safeCall-ში წარმოქმნილი პანიკა. ამ გზით, პანიკებს პირდაპირ defer-ში ვერ იჭერ, მაგრამ მათ შეიძლება დამუშავდეს recover()-ის საშუალებით, გადადებული ფუნქციის შიგნით.