Junior — Middle
Може ли се користити контекст за пренос података између компоненти или функција?
sobes.tech АИ
Одговор од АИ
U Go, context.Context je namenjen za prenos signalov o preklicu, č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.