Sobes.tech
Senior

Do czego służy kontekst w Go?

sobes.tech AI

Odpowiedź od AI

W Go, pakiet context służy do zarządzania czasem życia żądań i operacji, szczególnie w systemach rozproszonych i podczas pracy z goroutines. Umożliwia przekazywanie sygnałów anulowania, limitów czasowych i wartości między funkcjami i goroutines.

Główne zadania context:

  • Anulowanie operacji (np. w przypadku przekroczenia limitu czasu lub anulowania żądania przez użytkownika).
  • Przekazywanie limitów czasowych (moment, w którym operacja powinna się zakończyć).
  • Przekazywanie wartości przekrojowych (np. identyfikatorów żądań, tokenów uwierzytelniania).

Przykład użycia:

ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
// Anuluj po 5 sekundach od przekroczenia limitu czasu

go func(ctx context.Context) {
    select {
    case <-time.After(time.Second * 10):
        fmt.Println("Operacja zakończona")
    case <-ctx.Done():
        fmt.Println("Operacja anulowana lub przekroczono limit czasu")
    }
}(ctx)

// Na końcu zawsze wywołujemy cancel() aby zwolnić zasoby
cancel()

W ten sposób context pomaga kontrolować cykl życia operacji i koordynować pracę goroutines.