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.