Go – Getting invalid operation: themap[“title”] (type interface {} does not support indexing) when trying to index a map

gomap

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?

Best Answer

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"])