Sobes.tech
Junior — Middle

Оё имкон дорад, ки паникаҳоро дар дохили даъвати defer дар Go бигиранд ва идора кунанд?

sobes.tech AI

Ҷавоб аз AI

Дар забони Go, шумо метавонед defer-ро барои идоракунии паникаҳо истифода баред, аммо худи даъвати defer паникаҳоро намегирад; бояд онро дар дохили функсияи таъхиршуда бо истифода аз recover() фатҳ кунед.

Масалан:

func safeCall() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Паникаи фатҳ ва коркардшуда:", r)
        }
    }()
    panic("чизи нодуруст шуд")
}

Ин ҷо, recover() дар дохили функсияи таъхиршуда даъват мешавад ва имкон медиҳад, ки паника, ки дар safeCall рух додааст, фатҳ шавад. Ба ин тариқ, паникаҳоро мустақиман дар defer фатҳ кардан мумкин нест, аммо онҳоро дар дохили функсияи таъхиршуда бо recover() идора кардан мумкин аст.