Conversion de l'interface{} en carte avec itération
Dans votre code, vous rencontrez une erreur lors de la tentative de conversion de l'interface{} en carte . Pour résoudre ce problème et activer l'itération sur les éléments de la carte, suivez ces étapes :
Utilisez des assertions :
Remplacez l'approche basée sur la réflexion par des assertions de type direct, comme démontré dans le code ci-dessous :
func process(in interface{}, isSlice bool, isMap bool) { if isMap { v := in.(map[string]*Book) fmt.Printf("Type: %v\n", v) for _, s := range v { fmt.Printf("Value: %v\n", s) } } }
Cette assertion attribue la valeur interface{} à une variable de type map[string]*Book si la condition est remplie. Cette approche est plus efficace et ne nécessite pas de réflexion.
Vous pouvez également utiliser des instructions switch pour gérer différents types d'entrée sans utiliser de réflexion.
Utilisez des touches de mappage personnalisées avec réflexion ( Facultatif) :
Si vous avez toujours besoin d'utiliser la réflexion, vous pouvez récupérer les clés de carte à l'aide de Value.MapKeys au lieu de parcourir directement la valeur. Voir la réponse Stack Overflow mentionnée dans la solution fournie pour plus de détails sur cette approche.
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!