web-dev-qa-db-ja.com

無効な操作の取得:マップのインデックスを作成しようとすると、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)
_

ただし、同じエラーメッセージが表示されました。私は何を間違えていますか?

37
Kevin Burke

ここでのデータ型がキーでした。 mdiは実際にはマップではなく、interface{}、これは何でも構いません-マップ、文字列、int。まず、期待されるキー/値タイプを使用してマップにアサートするか、 JSON and Go で説明されている厄介なcaseスイッチを実行する必要があります。

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