Junior — Middle
Cum se poate gestiona starea și încheierea unei goroutine în Go?
sobes.tech AI
Răspuns de la AI
În Go, gestionarea stării și terminarea goroutine-urilor se face de obicei folosind canale (channels) și contexte (context).
- Canalele permit transmiterea semnalelor între goroutine-uri. De exemplu, se poate crea un canal pentru a notifica necesitatea de a termina:
stop := make(chan struct{})
func() {
for {
select {
case <-stop:
return // Încheie goroutine-ul
default:
// Execută muncă
}
}
}()
// Pentru a opri goroutine-ul:
close(stop)
- Pachetul context oferă o modalitate convenabilă de a gestiona durata de viață a goroutine-urilor, mai ales când se lucrează cu solicitări sau operații de durată lungă:
ctx, cancel := context.WithCancel(context.Background())
func(ctx context.Context) {
for {
select {
case <-ctx.Done():
return // Încheie goroutine-ul
default:
// Lucrează
}
}
}(ctx)
// Pentru a opri:
cancel()
Astfel, goroutine-urile ascultă semnale prin canale sau contexte și se termină corect la primirea semnalului.