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("ինչ-որ բան սխալ եղավ")
}()