Erreur de syntaxe : accès à l'index refusé pour le type d'interface
Lorsque vous travaillez avec des cartes de type map[string]interface{} dans Go, c'est Il est important de comprendre pourquoi l'accès aux valeurs à l'aide de la notation d'index peut entraîner l'apparition frustrante de "l'interface de type {} ne prend pas en charge l'indexation". erreur.
La cause première : l'interface{}
Interface{} dans Go agit comme le caméléon d'un système de types, permettant à des objets de différents types d'être conservés dans un seul variable ou transmise par des fonctions. Cependant, la flexibilité a un coût : interface{} ne définit aucune méthode ou propriété spécifique, ce qui rend impossible l'exécution d'actions telles que l'indexation directement sur l'interface.
Comment résoudre le problème
Comment résoudre le problème
package main import ( "fmt" ) type Host struct { Name string } func main() { Map := make(map[string]interface{}) Map["hosts"] = []Host{Host{"test.com"}, Host{"test2.com"}} // Type cast the interface{} to a slice of Host hm := Map["hosts"].([]Host) fmt.Println(hm[0]) }
Pour surmonter ce problème d'indexation, nous devons explicitement convertir la valeur interface{} en type approprié. Go fournit un certain nombre d’opérateurs de conversion de type pour faciliter ce processus. Examinons un exemple :
Dans cet exemple, nous avons une map[string]interface{} appelée "Map" où nous avons stocké une tranche d'objets Host comme valeur associée au " clé "hôtes". Pour accéder à un élément de cette tranche, nous tapons cast la valeur interface{} stockée dans Map["hosts"] vers une tranche de Host.
Playground Link
Pour expérimenter ce code et constater le résultat, accédez au lien suivant : [Playground Lien](https://go.dev/play/p/dJrycL1QD0C)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!