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

  1. Utilizarea canalelor pentru semnale de oprire — goroutine ascultă un canal și, la primirea semnalului, se termină.

  2. Context (context.Context) — transmiterea unui context cu posibilitatea de anulare, goroutine verifică periodic ctx.Done() și se termină la anulare.

  3. 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.