为了账号安全,请及时绑定邮箱和手机立即绑定

Go lang 访问 {interface{} | []interface{}] 的索引?

Go lang 访问 {interface{} | []interface{}] 的索引?

Go
临摹微笑 2022-10-31 15:46:26
我的接口有点麻烦,我不能分享导致这个问题的任何代码原因是多行代码的结果。所以这里有问题,我需要访问这个 []interface{} 元素,但它给了我一个错误,比如(interface{}) 不支持索引任何帮助都会很棒。我现在被困住了。 
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

您需要一个类型开关来确定接口底层类型是什么。见: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)

}


查看完整回答
反对 回复 2022-10-31
  • 1 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信