Получение недопустимой операции: mymap [ "title" ] (тип интерфейса {} не поддерживает индексирование) при попытке индексирования карты
У меня есть данные, которые на карте, и я хочу индексировать в карту по ключу, чтобы получить значение.
mdi, err := page.Metadata()
fmt.Println(mdi["title"])
Однако я продолжаю получать сообщение об ошибке invalid operation: mdi["title"] (type interface {} does not support indexing)
. Я смущен, потому что данные - это карта, и я должен иметь возможность индексировать ее, чтобы получить значение. Если тип не был ясен, я также попытался передать значение в строку:
title, ok := mdi["title"].(string)
checkOk(ok)
fmt.Println(title)
Однако я получил то же сообщение об ошибке. Что я делаю неправильно?
Ответы
Ответ 1
Тип данных здесь был ключом. mdi
на самом деле не карта, а interface{}
, которая может быть чем угодно - карта, строка, int. Сначала вам нужно перенести его на карту или сделать неудобный case
переключатель, указанный в JSON и Go.
mdi, err := page.Metadata()
md, ok := mdi.(map[string]interface{})
fmt.Println(md["title"])
Ответ 2
Вероятно, ваша страница. Metadata возвращает указатель вместо значения. Следующий код работает как шарм:
package main
import "fmt"
type SomeCustomType map[string]interface{}
func PageData() SomeCustomType {
return SomeCustomType{"bar": "baz"}
}
func main() {
fmt.Printf("%+v\n", PageData())
}