获得无效的操作:尝试为地图建立索引时,mymap [“标题”](类型接口{}不支持索引)

问题描述:

I have data that's in a map, and I want to index into the map by key to get a value.

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

However I keep getting the error message invalid operation: mdi["title"] (type interface {} does not support indexing). I am confused, because the data is a map and I should be able to index into it to get the value. In case the type wasn't clear, I also tried to cast the value to a string:

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

However, I got the same error message. What am I doing wrong?

我具有地图中的数据,并且我想通过键索引到地图中以获取值。

  mdi,err:= page.Metadata()
fmt.Println(mdi [“ title”])
  code>  pre> 
 
 但是我仍然收到错误消息无效的操作:mdi [“ title”](类型接口{}不支持索引) code>。 我很困惑,因为数据是一个映射,我应该能够对其进行索引以获得值。 如果类型不清楚,我还尝试将值转换为字符串: p> 
 
 
  title,好:= mdi [“ title”]。(字符串)\  ncheckOk(ok)
fmt.Println(title)
  code>  pre> 
 
 

但是,我得到了相同的错误消息。 我在做什么错了? p> div>

The data type here was the key. mdi was not actually a map, but an interface{}, which could be anything - a map, a string, an int. You need to assert it to a map with expected key/value types first, or do the awkward case switch outlined in JSON and Go.

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

It is likely that your page.Metadata returns a pointer instead of a value. The following code works like a charm:

package main

import "fmt"

type SomeCustomType map[string]interface{}

func PageData() SomeCustomType {
    return SomeCustomType{"bar": "baz"}
}

func main() {
    fmt.Printf("%+v
", PageData())
}