Sobes.tech
Junior — Middle

Quali approcci e pratiche raccomandate vengono utilizzate quando si lavora con il contesto e il metodo context.WithValue?

sobes.tech AI

Risposta dell'AI

Quando si lavora con il contesto in Go e si utilizza context.WithValue, è importante ricordare le seguenti raccomandazioni:

  • Il contesto è destinato a trasmettere segnali di cancellazione, limiti di tempo e informazioni limitate relative alla richiesta.
  • Usa context.WithValue solo per trasmettere dati necessari durante il ciclo di vita della richiesta e che non sono adatti come parametri espliciti di funzione.
  • Le chiavi per WithValue devono essere tipi unici e non pubblici per evitare conflitti. Di solito, si crea un tipo di chiave personalizzato.
  • Non memorizzare nel contesto oggetti grandi o dati che potrebbero causare perdite di memoria.

Esempio di utilizzo di una chiave:

package main

import (
    "context"
    "fmt"
)

type ctxKey string

func main() {
    key := ctxKey("userID")
    ctx := context.WithValue(context.Background(), key, 42)

    userID := ctx.Value(key).(int)
    fmt.Println("ID utente dal contesto:", userID)
}

In questo modo, il contesto serve per trasmettere metadati e gestire il ciclo di vita delle operazioni, non per memorizzare lo stato dell'applicazione.