Junior — Middle
Este posibil ca o goroutine să fie întreruptă sau să se oprească singură?
sobes.tech AI
Răspuns de la AI
În Go, execuția unei goroutine poate înceta singură în mai multe cazuri:
- Goroutine a terminat funcția sa. De îndată ce funcția executată în goroutine se încheie, goroutine-ul se închide.
- Panic în interiorul goroutine-ului. Dacă apare un panic în goroutine și nu este gestionat, acesta se va încheia brusc.
- Anulare prin context (context). Dacă goroutine ascultă un semnal de anulare prin
context.Contextși îl primește, poate fi închisă corect.
Este important să înțelegi că goroutine-urile nu sunt întrerupte forțat din exterior — trebuie să implementezi un mecanism de oprire de unul singur, de exemplu, prin canale sau contexte.
Exemplu de utilizare a contextului pentru a anula o goroutine:
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine încheiată")
return
default:
// lucru
}
}
}(ctx)
// La un moment dat, apelăm cancel()
cancel()
Astfel, goroutine-ul se încheie fie de la sine după finalizarea muncii, fie la semnalul de anulare, dacă este prevăzut.