登录
首页 >  Golang >  Go问答

Go 语言访问 {interface{} | interface{}] 的索引?

来源:stackoverflow

时间:2024-03-03 11:12:18 193浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《Go 语言访问 {interface{} | interface{}] 的索引?》,聊聊,我们一起来看看吧!

问题内容

我的接口有点问题,我无法分享任何代码,因为这个问题是由多行代码造成的。所以问题是,我需要访问这个 []interface{} 元素,但它给了我一个错误,例如 (interface{}) 不支持索引 任何帮助都会很棒。我现在被困住了。


正确答案


您需要一个类型开关来确定接口底层类型是什么。 请参阅:https://go.dev/tour/methods/16

示例:(https://go.dev/play/p/gSRuHBoQYah):

package main

import (
        "encoding/json"
        "fmt"
        "log"
)

func printInterface(o interface{}) {
        switch v := o.(type) {
        case map[string]interface{}:
                fmt.Printf("this is a map. a: %+v\n", v["a"])
        case []interface{}:
                fmt.Printf("this is a slice, len: %d, v[0] is: %+v, type: %T\n", len(v), v[0], v[0])
        default:
                fmt.Printf("this is %T\n", v)

        }
}

func main() {
        var result1 interface{}
        listOfObjects := `[{"a":1}, {"a":2}]`
        if err := json.Unmarshal([]byte(listOfObjects), &result1); err != nil {
                log.Fatal(err)
        }

        printInterface(result1)

        var result2 interface{}
        singleObject := `{"a":1, "b":2}`
        if err := json.Unmarshal([]byte(singleObject), &result2); err != nil {
                log.Fatal(err)
        }

        printInterface(result2)
}

今天关于《Go 语言访问 {interface{} | interface{}] 的索引?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

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