我有 map 中的数据,我想通过键索引到 map 中以获得一个值.

mdi, err := page.Metadata()
fmt.Println(mdi["title"])

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

title, ok := mdi["title"].(string)
checkOk(ok)
fmt.Println(title)

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

推荐答案

这里的数据类型是关键.mdi实际上不是一个映射,而是一个interface{},它可以是任何东西-映射、字符串、整数.您需要首先将其断言到具有预期键/值类型的映射,或者执行JSON and Go中描述的笨拙的caseswitch .

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

Go相关问答推荐

如何处理Firestore的DataTo方法中的嵌套指针?

Go - os.userHomeDir()在WSL上返回C:\Users\

golang父进程的副本无法进行https/tls调用并获得tls:未能验证证书""

Go:嵌入类型不能是类型参数""

为什么在GO中打印变量会导致堆栈溢出?

调用API时使用nginx作为反向代理时从nginx获取502坏网关

带有一个新变量的Go冒号等于运算符

Kafka架构注册表-Broker:Broker无法验证记录

Cypher 查找(多个)最低 node

Go - 永远停止带有上下文的循环

这是实现超时的常见方法,为什么 time.After 不起作用

获取切片元素的地址是否意味着 Go 中元素的副本?

使用 go.work 文件在多个测试文件上运行 go test 命令

在我的情况下,如何以正确的方式测试方法?

Go 加密库创建的 PKCS1 公钥与openssl rsa ...之间的区别

在 Golang 中获取谷歌云服务帐户的访问令牌?

为什么 go.mod 中的所有依赖都是间接的?

Golang 有类似 C++ 的 decltype 的东西吗?

如何获得Ent中数字列的总和

带有 *s3.S3 对象的 Golang 单元测试