Sobes.tech
Junior — Middle

Poate fi folosit contextul pentru a transmite date între componente sau funcții?

sobes.tech AI

Răspuns de la AI

În Go, contextul (context.Context) este destinat pentru transmiterea semnalelor de anulare, a limitelor de timp și a valorilor legate de solicitare sau operație, între goroutine-uri și funcții. Cu toate acestea, nu se recomandă utilizarea contextului pentru transmiterea datelor arbitrare între componente sau funcții.

Motivări:

  • Contextul trebuie să conțină doar date legate de gestionarea ciclului de viață al operației (de exemplu, timeout-uri, anulări).
  • Transmiterea datelor de business prin context complică codul și reduce lizibilitatea sa.

Abordarea corectă este să transmiteți explicit datele necesare prin parametrii funcțiilor sau să folosiți alte structuri pentru schimbul de date.

Exemplu de utilizare a contextului pentru transmiterea unei valori legate de solicitare:

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

Este mai bine să evitați această abordare pentru transmiterea datelor între componente, cu excepția cazurilor în care este cu adevărat necesar pentru gestionarea ciclului de viață al operației.