登录
首页 >  Golang >  Go问答

无法访问 [] 接口内映射中的键

来源:Golang技术栈

时间:2023-04-27 17:11:52 360浏览 收藏

今天golang学习网给大家带来了《无法访问 [] 接口内映射中的键》,其中涉及到的知识点包括golang等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

示例代码:

package main

import "fmt"

func main() {
    example_container := []interface{}{
        map[string]string{
            "name": "bob",
            "id": "1",
        },
        map[string]string{
            "name": "jim",
            "id": "2",
        },
    }
    fmt.Printf("%v\n", example_container)
    fmt.Printf("%v\n", example_container[0])
    fmt.Printf("%v\n", example_container[0]["name"])
}

有问题的线路:

fmt.Printf("%v\n", example_container[0]["name"])

错误:

invalid operation: example_container[0]["name"] (type interface {} does not support indexing)

题:

那么,如何访问此界面中的密钥呢?

我是否必须使用一组方法来定义更精细的接口来完成此操作?

正确答案

由于您的切片类型是[]interface{},索引此切片将为您提供 type 的元素interface{}。类型的值interface{}不能被索引。

但是由于您将类型的值map[string]string放入其中,您可以使用类型断言来获取该映射类型的值,您可以正确索引该值:

fmt.Printf("%v\n", example_container[0].(map[string]string)["name"])

输出(在Go Playground上试试):

[map[name:bob id:1] map[name:jim id:2]]
map[name:bob id:1]
bob

如果您知道您将始终map[string]stringexample_container切片中存储类型值,最好是这样定义它:

example_container := []map[string]string{
    map[string]string{
        "name": "bob",
        "id":   "1",
    },
    map[string]string{
        "name": "jim",
        "id":   "2",
    },
}

然后你不需要类型断言来访问名称:

fmt.Printf("%v\n", example_container[0]["name"])

在Go Playground上试试这个。

另请注意,在用于初始化example_container切片的复合文字中,您甚至可以在列出元素时省略映射类型:

example_container := []map[string]string{
    {
        "name": "bob",
        "id":   "1",
    },
    {
        "name": "jim",
        "id":   "2",
    },
}

今天关于《无法访问 [] 接口内映射中的键》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表