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

如何将接口{}保存的数据转换为切片(当接口{}的数据结构已知时)?

如何将接口{}保存的数据转换为切片(当接口{}的数据结构已知时)?

Go
长风秋雁 2022-08-24 20:36:04
我从一个函数接收数据,该函数返回一个.apiFunc()interface{}我知道在这种特定情况下,返回的数据是诸如structtype Data struct {     hello string     world int}我不知道切片有多大(API可以发送一个或100个此类实体的JSON数组)。我应该如何声明变量myData,以便它是数据切片,由apiFunc()的返回值组成?我知道那件事ret := apiFunc() myData := ret.([]Data)不起作用(它恐慌与interface conversion: interface {} is []interface {}, not []main.Data)
查看完整描述

1 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

此代码的工作原理:


package main


import (

    "fmt"

)


type Data struct {

    hello string

    world int

}


func apiFunc() interface{} {

    return []Data{{hello: "first hello", world: 1}, {hello: "second hello", world: 2}}

}


func main() {

    ret := apiFunc()

    fmt.Println(ret.([]Data))

}

去游乐场链接: https://play.golang.org/p/SOGr6Fj-wO5


确保实际返回的是切片,而不是切片apiFunc()Datainterface


如果它是接口切片,则需要执行以下操作:


package main


import (

    "fmt"

)


type Data struct {

    hello string

    world int

}


func apiFunc() interface{} {

    toReturn := make([]interface{}, 2)

    toReturn[0] = Data{hello: "first hello", world: 1}

    toReturn[1] = Data{hello: "second hello", world: 2}

    return toReturn

}


func main() {

    ret := apiFunc()

    interfaceSlice := ret.([]interface{})

    dataSlice := make([]Data, len(interfaceSlice))

    for index, iface := range interfaceSlice {

        dataSlice[index] = iface.(Data)

    }

    fmt.Println(dataSlice)

}

去游乐场链接: https://play.golang.org/p/TsfMuKj7nZc


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

添加回答

举报

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