Подтвердить что ты не робот

Получение недопустимой операции: 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)

Однако я получил то же сообщение об ошибке. Что я делаю неправильно?

4b9b3361

Ответ 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())
}