Sobes.tech
Junior — Middle

Je možné použiť kontext na prenos údajov medzi komponentmi alebo funkciami?

sobes.tech AI

Odpoveď od AI

V Go je context.Context namenjen za prenos signalov preklica, časovnih omejitev in vrednosti, povezanih z zahtevkom ali operacijo, med gorutinami in funkcijami. Vendar pa ni priporočljivo uporabljati konteksta za prenos naključnih podatkov med komponentami ali funkcijami.

Razlogi:

  • Kontekst naj vsebuje le podatke, povezane z upravljanjem življenjskega cikla operacije (npr. časovne omejitve, preklici).
  • Prenos poslovnih podatkov prek konteksta zaplete kodo in zmanjša berljivost.

Pravi pristop je, da potrebne podatke eksplicitno prenesete prek parametrov funkcij ali uporabite druge strukture za izmenjavo podatkov.

Primer uporabe konteksta za prenos vrednosti, povezane z zahtevkom:

ctx := context.WithValue(context.Background(), "userID", 12345)
userID := ctx.Value("userID")

Vendar je bolje, da se takšnemu pristopu izognete pri prenosu podatkov med komponentami, razen če je to resnično potrebno za upravljanje življenjskega cikla operacije.