Sobes.tech
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.