Sobes.tech
Junior — Middle

Jak lze spravovat stav a ukončení gorutiny v Go?

sobes.tech AI

Odpověď od AI

V Go je řízení stavu a ukončení gorutin obvykle prováděno pomocí kanálů (channels) a kontextů (context).

  1. Kanály umožňují přenos signálů mezi gorutinami. Například lze vytvořit kanál pro oznámení o nutnosti ukončení:
stop := make(chan struct{})
func() {
    for {
        select {
        case <-stop:
            return // Ukončení gorutiny
        default:
            // Provádění práce
        }
    }
}()

// Pro zastavení gorutiny:
close(stop)
  1. Balíček context poskytuje pohodlný způsob, jak spravovat životnost gorutin, zejména při práci s požadavky nebo dlouhotrvajícími operacemi:
ctx, cancel := context.WithCancel(context.Background())
func(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            return // Ukončení gorutiny
        default:
            // Práce
        }
    }
}(ctx)

// Pro zastavení:
cancel()

Tímto způsobem gorutiny poslouchají signály přes kanály nebo kontexty a správně ukončí práci při jejich obdržení.