Junior — Middle
Czy można używać kontekstu do przekazywania danych między komponentami lub funkcjami?
sobes.tech AI
Odpowiedź od AI
W Go, kontekst (context.Context) jest przeznaczony do przekazywania sygnałów anulowania, limitów czasowych i wartości związanych z żądaniem lub operacją, między gorutynami i funkcjami. Nie zaleca się jednak używania kontekstu do przekazywania dowolnych danych między komponentami lub funkcjami.
Przyczyny:
- Kontekst powinien zawierać tylko dane związane z zarządzaniem cyklem życia operacji (np. limity czasowe, anulowania).
- Przekazywanie danych biznesowych przez kontekst komplikuje kod i obniża jego czytelność.
Poprawne podejście to jawne przekazywanie potrzebnych danych przez parametry funkcji lub używanie innych struktur do wymiany danych.
Przykład użycia kontekstu do przekazywania wartości związanej z żądaniem:
ctx := context.WithValue(context.Background(), "userID", 12345)
userID := ctx.Value("userID")
Lepiej unikać takiego podejścia do przekazywania danych między komponentami, chyba że jest to naprawdę konieczne do zarządzania cyklem życia operacji.