Sobes.tech
Junior — Middle

Jakie zalecane podejścia i praktyki są stosowane podczas pracy z kontekstem i metodą context.WithValue?

sobes.tech AI

Odpowiedź od AI

Pracując z kontekstem w Go i używając context.WithValue, ważne jest, aby pamiętać o następujących zaleceniach:

  • Kontekst służy do przekazywania sygnałów anulowania, limitów czasowych i ograniczonych informacji związanych z żądaniem.
  • Używaj context.WithValue tylko do przekazywania danych, które są potrzebne przez cały cykl życia żądania i nie nadają się na jawne parametry funkcji.
  • Klucze dla WithValue powinny być unikalnymi i niepublicznymi typami, aby uniknąć konfliktów. Zazwyczaj tworzy się własny typ klucza.
  • Nie przechowuj w kontekście dużych obiektów lub danych, które mogą prowadzić do wycieków pamięci.

Przykład użycia klucza:

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 użytkownika z kontekstu:", userID)
}

W ten sposób kontekst służy do przekazywania metadanych i zarządzania cyklem życia operacji, a nie do przechowywania stanu aplikacji.