Sobes.tech
Junior — Middle

Կարո՞ղ է լինել իրավիճակ, երբ գորուտինն ընդհատվի կամ ինքնուրույն դադարեցվի:

sobes.tech AI

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

Go-ում, goroutine-ի կատարմանը կարող է ինքնուրույն ավարտվել մի քանի դեպքում՝

  • Goroutine-ը ավարտեց իր ֆունկցիան։ Երբ այն ֆունկցիան, որը գործարկվել է goroutine-ում, ավարտվում է, goroutine-ը փակվում է։
  • Panic ներսում goroutine-ի։ Եթե ներսում goroutine-ի առաջանում է panic և այն չի մշակվում, այն կավարտվի անսպասելիորեն։
  • Չեղարկում՝ կոնտեքստի (context) միջոցով։ Եթե goroutine-ը լսում է չեղարկման նշան context.Context-ի միջոցով և այն ստանում է, կարող է ճիշտ ավարտվել։

Կարևոր է հասկանալ, որ goroutine-ները չեն խստորեն խզվում արտաքինից՝ դուք պետք է ինքնուրույն իրականացնեք կանգնեցման մեխանիզմ, օրինակ՝ ալիքների կամ կոնտեքստերի միջոցով։

Օրինակ՝ կոնտեքստի օգտագործմամբ goroutine-ը չեղարկելու համար՝

ctx, cancel := context.WithCancel(context.Background())

go func(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Goroutine-ը ավարտվեց")
            return
        default:
            // աշխատանք
        }
    }
}(ctx)

// Մի որոշ ժամանակ, կանչում ենք cancel()
cancel()

Այսպիսով, goroutine-ը կամ ինքնուրույն ավարտվում է աշխատանքի ավարտից հետո, կամ նշանով՝ չեղարկում, եթե դա նախատեսված է։