Sobes.tech
Junior — Middle

È possibile utilizzare il contesto per trasmettere dati tra componenti o funzioni?

sobes.tech AI

Risposta dell'AI

In Go, il contesto (context.Context) è progettato per trasmettere segnali di cancellazione, limiti di tempo e valori associati alla richiesta o all'operazione, tra goroutine e funzioni. Tuttavia, non è consigliabile usare il contesto per trasmettere dati arbitrari tra componenti o funzioni.

Motivi:

  • Il contesto dovrebbe contenere solo dati relativi alla gestione del ciclo di vita dell'operazione (ad esempio, timeout, cancellazioni).
  • Trasmettere dati di business tramite il contesto complica il codice e ne riduce la leggibilità.

L'approccio corretto è passare esplicitamente i dati necessari tramite i parametri delle funzioni o usare altre strutture per scambiare dati.

Esempio di utilizzo del contesto per trasmettere un valore legato alla richiesta:

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

Tuttavia, è meglio evitare questo approccio per trasmettere dati tra componenti, a meno che non sia strettamente necessario per gestire il ciclo di vita dell'operazione.