web-dev-qa-db-fra.com

Obtention d'une opération non valide: mymap ["title"] (l'interface de type {} ne prend pas en charge l'indexation) lorsque vous essayez d'indexer une carte

J'ai des données qui sont dans une carte, et je veux indexer dans la carte par clé pour obtenir une valeur.

mdi, err := page.Metadata()
fmt.Println(mdi["title"])

Cependant, je reçois toujours le message d'erreur invalid operation: mdi["title"] (type interface {} does not support indexing). Je suis confus, car les données sont une carte et je devrais pouvoir les indexer pour obtenir la valeur. Dans le cas où le type n'était pas clair, j'ai également essayé de convertir la valeur en une chaîne:

title, ok := mdi["title"].(string)
checkOk(ok)
fmt.Println(title)

Cependant, j'ai reçu le même message d'erreur. Qu'est-ce que je fais mal?

37
Kevin Burke

Le type de données ici était la clé. mdi n'était pas en fait une carte, mais un interface{}, qui pourrait être n'importe quoi - une carte, une chaîne, un int. Vous devez d'abord l'asserter à une carte avec les types de clé/valeur attendus, ou faire le commutateur maladroit case décrit dans JSON et Go .

mdi, err := page.Metadata()
md, ok := mdi.(map[string]interface{})
fmt.Println(md["title"])
65
Kevin Burke