Junior — Middle
Lze použít kontext k přenosu dat mezi komponentami nebo funkcemi?
sobes.tech AI
Odpověď od AI
V Go je kontext (context.Context) určen pro přenos signálů o zrušení, časových limitů a hodnot souvisejících s požadavkem nebo operací, mezi gorutinami a funkcemi. Nicméně, nedoporučuje se používat kontext pro přenos libovolných dat mezi komponentami nebo funkcemi.
Důvody:
- Kontext by měl obsahovat pouze data související s řízením životního cyklu operace (například časové limity, zrušení).
- Přenos podnikových dat přes kontext komplikuje kód a snižuje jeho čitelnost.
Správný přístup je explicitně předávat potřebná data přes parametry funkcí nebo používat jiné struktury pro výměnu dat.
Příklad použití kontextu pro přenos hodnoty související s požadavkem:
ctx := context.WithValue(context.Background(), "userID", 12345)
userID := ctx.Value("userID")
Je lepší se takovému přístupu vyhnout při přenosu dat mezi komponentami, pokud to není skutečně nutné pro řízení životního cyklu operace.