Comment indexer une carte d'interface dans Go : résoudre "le type interface {} ne prend pas en charge l'indexation"
Dans Go, tentative d'indexation une carte interface{} avec une clé spécifique peut conduire à l'erreur "type interface {} ne prend pas en charge l'indexation". Cela se produit lorsque vous essayez d'accéder à des éléments d'une carte où les valeurs sont stockées en tant qu'interfaces et où les types spécifiques de ces valeurs sont inconnus.
Une façon de surmonter cette erreur consiste à transtyper explicitement la valeur renvoyée par le mappez en utilisant le type de tranche que vous attendez de la valeur. Par exemple, considérons l'extrait de code suivant dans lequel une carte appelée TopologyMap contient des mappages de chaînes vers des tableaux d'objets :
Map := make(map[string]interface{}) Map["Users"] = Users_Array Map["Hosts"] = Hosts_Array
Pour récupérer des éléments de cette carte, vous pouvez utiliser la syntaxe suivante, mais cela entraînera l'erreur "type interface {} ne prend pas en charge l'indexation" :
Map["Users"][0]
Pour résoudre ce problème, convertissez explicitement la valeur de l'interface en son type souhaité à l'aide d'une assertion de type. Voici un exemple qui montre comment procéder pour une carte de chaînes et de tranches d'hôtes :
import ( "fmt" ) type Host struct { Name string } func main() { Map := make(map[string]interface{}) Map["hosts"] = []Host{Host{"test.com"}, Host{"test2.com"}} hm := Map["hosts"].([]Host) fmt.Println(hm[0]) }
Dans cet exemple, nous convertissons explicitement la valeur stockée sous la clé "hosts" en une tranche de Objets hôtes, permettant d'accéder à des éléments hôtes individuels.
En utilisant cette approche, vous pouvez indexer efficacement une carte d'interface{} et récupérer les valeurs spécifiques dont vous avez besoin, même si leurs types ne sont pas connu au moment de la compilation.
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!