Sobes.tech
Junior — Middle

Vai kontekstu var izmantot, lai datus pārsūtītu starp komponentiem vai funkcijām?

sobes.tech AI

Atbilde no AI

Go valodā konteksts (context.Context) ir paredzēts signālu pārraidīšanai par atcelšanu, laika ierobežojumiem un vērtībām, kas saistītas ar pieprasījumu vai operāciju, starp gorutīnām un funkcijām. Tomēr nav ieteicams izmantot kontekstu nejaušu datu pārraidīšanai starp komponentiem vai funkcijām.

Iemesli:

  • Kontekstam jāietver tikai dati, kas saistīti ar operācijas dzīves cikla pārvaldību (piemēram, laika ierobežojumi, atcelšanas).
  • Biznesa datu pārraidīšana caur kontekstu sarežģī kodu un samazina tā lasāmību.

Pareizā pieeja ir skaidri nodot nepieciešamos datus caur funkciju parametriem vai izmantot citas struktūras datu apmaiņai.

Piemērs, kā izmantot kontekstu, lai nodotu pieprasījumam saistītu vērtību:

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

Tomēr ir labāk izvairīties no šādas pieejas datu nodošanai starp komponentiem, izņemot gadījumus, kad tas patiešām ir nepieciešams operācijas dzīves cikla pārvaldībai.