Sobes.tech
Middle — Middle+

Jak można kontrolować wykonanie programu i zarządzać jego stanem podczas pracy?

sobes.tech AI

Odpowiedź od AI

W Go, aby kontrolować wykonywanie programu i zarządzać jego stanem podczas działania, często używa się:

  • Gorutyn — lekkich wątków umożliwiających wykonywanie funkcji równolegle.
  • Kanałów — do synchronizacji i wymiany danych między gorutynami.
  • Kontekstu (context.Context) — do zarządzania czasem życia operacji, anulowania i przekazywania limitów czasowych.
  • Pakietu sync — do zarządzania dostępem współbieżnym do zasobów (Mutex, WaitGroup itp.).

Przykład użycia kontekstu do anulowania operacji:

ctx, cancel := context.WithCancel(context.Background())

go func() {
    // po 2 sekundach anulujemy kontekst
    time.Sleep(2 * time.Second)
    cancel()
}()

select {
case <-time.After(5 * time.Second):
    fmt.Println("Operacja zakończona")
case <-ctx.Done():
    fmt.Println("Operacja anulowana")
}

W ten sposób zarządzanie stanem programu osiąga się poprzez koordynację gorutyn, użycie kontekstu do anulowania i synchronizacji, a także przez mechanizmy blokad i sygnały.