Sobes.tech
Middle

Goroutine-i işə salıb içində panic çağırsaq nə baş verər? Goroutine dayanacaq yoxsa bütün tətbiq dayanacaq?

sobes.tech Süni İntellekt

AI-dan cavab

Bir goroutine içində panic baş verərsə, bu konkret goroutine dayanacaq, amma bütün tətbiq avtomatik olaraq bağlanmayacaq. Bir goroutine-dəki panika bütün goroutine-lərin və ya proqramın dayanmasına səbəb olmur, əgər o kök səviyyəyə çatmaz və işlənməzsə.

Tətbiqin qəfil bağlanmasının qarşısını almaq üçün, recover-dən həm eyni goroutine daxilində, həm də çağıran funksiyada istifadə etmək olar, beləliklə panika tutulur və idarə olunur.

Nümunə:

func() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Goroutine-də tutulan panika:", r)
        }
    }()
    panic("nəsə səhv getdi")
}()

Bu nümunədə, panika bütün tətbiqin dayanmasına səbəb olmayacaq, əksinə goroutine daxilində idarə olunacaq.