Junior — Middle
Cum se poate opri corect o goroutine în execuție, dacă este necesar ca aceasta să se încheie în funcție de un semnal extern sau o condiție, chiar dacă rezultatul nu a fost încă obținut?
sobes.tech AI
Răspuns de la AI
Pentru a opri corect o goroutine în execuție printr-un semnal extern sau condiție în Go, se utilizează de obicei contextul (context.Context) sau canale pentru a transmite semnalul de anulare.
Exemplu cu utilizarea contextului:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// S-a primit semnalul de anulare, încheiem goroutine
return
default:
// Executăm munca
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// La un moment dat, apelăm cancel() pentru a opri goroutine
cancel()
}
Această abordare permite goroutinei să verifice periodic dacă a fost trimis un semnal de oprire și să se încheie corect, chiar dacă rezultatul nu a fost încă obținut. În mod similar, se poate folosi un canal pentru transmiterea semnalului de oprire, dar context este o metodă mai idiomatică și convenabilă în Go.