Sobes.tech
Junior — Middle

Este posibil ca o goroutine să fie întreruptă sau să se oprească singură?

sobes.tech AI

Răspuns de la AI

În Go, execuția unei goroutine poate înceta singură în mai multe cazuri:

  • Goroutine a terminat funcția sa. De îndată ce funcția executată în goroutine se încheie, goroutine-ul se închide.
  • Panic în interiorul goroutine-ului. Dacă apare un panic în goroutine și nu este gestionat, acesta se va încheia brusc.
  • Anulare prin context (context). Dacă goroutine ascultă un semnal de anulare prin context.Context și îl primește, poate fi închisă corect.

Este important să înțelegi că goroutine-urile nu sunt întrerupte forțat din exterior — trebuie să implementezi un mecanism de oprire de unul singur, de exemplu, prin canale sau contexte.

Exemplu de utilizare a contextului pentru a anula o goroutine:

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()
cancel()

Astfel, goroutine-ul se încheie fie de la sine după finalizarea muncii, fie la semnalul de anulare, dacă este prevăzut.