获取无效操作:mymap ["title"](类型interface {}不支持索引)在尝试索引地图时

Kev*_*rke 38 map go

我有一个地图中的数据,我想按键索引到地图以获取值.

mdi, err := page.Metadata()
fmt.Println(mdi["title"])
Run Code Online (Sandbox Code Playgroud)

但是我一直收到错误消息invalid operation: mdi["title"] (type interface {} does not support indexing).我很困惑,因为数据是一个地图,我应该能够索引它以获得值.如果类型不清楚,我也尝试将值转换为字符串:

title, ok := mdi["title"].(string)
checkOk(ok)
fmt.Println(title)
Run Code Online (Sandbox Code Playgroud)

但是,我得到了相同的错误消息.我究竟做错了什么?

Kev*_*rke 68

这里的数据类型是关键.mdi实际上并不是一张地图,而是一张interface{}可以是任何东西的地图 - 地图,字符串,整数.您需要首先将其断言为具有预期键/值类型的映射,或者执行JSON和Go中case概述的笨拙开关.

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

  • 这不是强制转换,而是类型断言. (14认同)