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.WithValuetylko do przekazywania danych, które są potrzebne przez cały cykl życia żądania i nie nadają się na jawne parametry funkcji. - Klucze dla
WithValuepowinny 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.