Sobes.tech
Junior — Middle

Ar galima naudoti kontekstą duomenims perduoti tarp komponentų ar funkcijų?

sobes.tech AI

Atsakymas iš AI

Go kalboje context.Context yra skirtas perduoti signalus apie atšaukimą, laiko limitus ir reikšmes, susijusias su užklausa ar operacija, tarp gorutinių ir funkcijų. Tačiau nerekomenduojama naudoti kontekstą perduoti atsitiktinius duomenis tarp komponentų ar funkcijų.

Priežastys:

  • Kontekstas turėtų turėti tik duomenis, susijusius su operacijos gyvavimo ciklo valdymu (pvz., laiko limitai, atšaukimai).
  • Verslo duomenų perdavimas per kontekstą komplikuoja kodą ir mažina jo skaitomumą.

Tinkamas požiūris yra aiškiai perduoti reikalingus duomenis per funkcijų parametrus arba naudoti kitas struktūras duomenų mainams.

Pavyzdys, kaip naudoti kontekstą perduoti užklausai susijusią reikšmę:

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

Tačiau geriau vengti tokio požiūrio perduodant duomenis tarp komponentų, išskyrus atvejus, kai tai tikrai būtina operacijos gyvavimo ciklo valdymui.