Junior — Middle
Kas on võimalik kasutada konteksti andmete edastamiseks komponentide või funktsioonide vahel?
sobes.tech AI
Vastus AI-lt
Go-s, (context.Context) kontekst on mõeldud signaalide, ajapiirangute ja väärtuste edastamiseks, mis on seotud taotluse või operatsiooniga, gorutinide ja funktsioonide vahel. Siiski ei soovitata konteksti kasutada juhuslike andmete edastamiseks komponentide või funktsioonide vahel.
Põhjused:
- Kontekst peaks sisaldama ainult andmeid, mis on seotud operatsiooni elutsükli haldamisega (näiteks ajapiirangud, tühistamised).
- Äriandmete edastamine konteksti kaudu keeruliseks ja vähendab koodi loetavust.
Õige lähenemine on andmed selgelt funktsioonide parameetrite kaudu edastada või kasutada muid struktuure andmete vahetamiseks.
Näide konteksti kasutamisest taotlusega seotud väärtuse edastamiseks:
ctx := context.WithValue(context.Background(), "userID", 12345)
userID := ctx.Value("userID")
Kuid on parem vältida sellist lähenemist andmete edastamiseks komponentide vahel, välja arvatud juhul, kui see on tõesti vajalik operatsiooni elutsükli haldamiseks.