Le package contextuel de Go vous permet de transmettre des données spécifiques à une requête à l'aide de context.WithValue . Cependant, il n'est pas clair comment stocker efficacement plusieurs paires clé-valeur.
Considérez les options suivantes :
1. Appels multiples à WithValue()
Appelez WithValue() plusieurs fois, à chaque fois avec une nouvelle paire clé-valeur. C'est simple mais peut être fastidieux.
2. Struct avec des paires clé-valeur
Créez une structure pour contenir toutes les paires clé-valeur et transmettez-la en tant que valeur unique à WithValue(). Cela permet un accès facile à toutes les clés ultérieurement, mais peut impliquer une copie inutile de grandes structures de données.
3. Solution hybride
Stockez les paires clé-valeur dans une carte et créez une structure wrapper qui permet aux getters d'accéder aux valeurs individuelles. Cela permet un accès simultané sécurisé et évite la copie de grandes quantités de données.
Voici un exemple de solution hybride :
type Values struct { m map[string]string } func (v Values) Get(key string) string { return v.m[key] } func main() { v := Values{map[string]string{ "1": "one", "2": "two", }} ctx := context.Background() ctx2 := context.WithValue(ctx, "myvalues", v) fmt.Println(ctx2.Value("myvalues").(Values).Get("2")) }
Sortie :
two
La meilleure approche dépend des exigences spécifiques. Pour les scénarios critiques en termes de performances avec de nombreuses paires clé-valeur, la solution hybride est recommandée. Sinon, plusieurs appels à WithValue() ou à une structure avec des paires clé-valeur peuvent être plus pratiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!