Sobes.tech
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).

  1. 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)
  1. 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.