Sobes.tech
Junior — Middle

თუ გორუტინაში პანიკა მოხდება, რა შედეგები უნდა ველოდოთ?

sobes.tech AI

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

თუ goroutine-ში პანიკა (panic) მოხდება, ამ goroutine-ის შესრულება შეწყდება და დაიწყება stack unwinding პროცესი, რომლის დროსაც გამოიძახებიან defer-ით მითითებული ფუნქციები.

თუ პანიკა არ იქნება მართული (მაგალითად, recover-ის გამოყენებით defer-ში), ეს გამოიწვევს მთლიანი პროგრამის დასრულებას.

მნიშვნელოვანია להבין, რომ ერთი goroutine-ის პანიკა პირდაპირ არ ზემოქმედებს სხვა goroutine-ებზე — ისინი აგრძელებენ მუშაობას, თუ პანიკა მთლიანი პროგრამის გაჩერებას არ გამოიწვევს.

პანიკის მართვის მაგალითი:

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