Senior
Cum se poate încheia o goroutine? Care sunt metodele?
sobes.tech AI
Răspuns de la AI
În Go, goroutine-urile nu au un mecanism încorporat pentru terminarea forțată din exterior, așa că încheierea unei goroutine se face de obicei în mod cooperativ. Principalele metode sunt:
-
Utilizarea canalelor pentru semnale de oprire — goroutine ascultă un canal și, la primirea semnalului, se termină.
-
Context (context.Context) — transmiterea unui context cu posibilitatea de anulare, goroutine verifică periodic ctx.Done() și se termină la anulare.
-
Flag-uri sau variabile de stare — goroutine verifică valoarea unei variabile și se termină dacă este necesar.
Exemplu cu context:
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() pentru a opri goroutine
cancel()
Este important ca goroutine să răspundă corect la semnalul de încheiere, altfel va continua să funcționeze.