Sobes.tech
Junior — Middle

Եթե գորուտինում պանիկա տեղի ունենա, ինչ հետևանքներ պետք է սպասել?

sobes.tech AI

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

Եթե goroutine-ում տեղի ունենա panic (panic), այդ goroutine-ի կատարումը ընդհատվում է, և սկսվում է stack unwinding գործընթացը, որի ժամանակ կանչվում են defer-ով նշված ֆունկցիաները:

Եթե panic-ը չտիրապետվի (օրինակ, recover-ի միջոցով defer-ում), դա կհանգեցնի ամբողջ ծրագրի ավարտին:

Կարևոր է հասկանալ, որ մի goroutine-ում առաջացած panic-ը ուղղակիորեն չի ազդում մյուս goroutine-ների վրա — նրանք շարունակում են աշխատել, եթե միայն panic-ը չի հանգեցնի ամբողջ ծրագրի կանգնեցմանը:

Panic-ների կառավարման օրինակ:

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