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

如何制作运行时指定类型的元素数组

如何制作运行时指定类型的元素数组

Go
小怪兽爱吃肉 2023-04-04 17:12:26
我正在尝试创建一个元素数组,其类型仅在运行时已知(pkg API 获取 json 中的元素并转换为结构)。我有一个类似下面的辅助函数,它将一个接口作为参数,并在调用 make 时尝试获取接口的类型。golang 编译器似乎不喜欢它。var whatAmI = func(i interface{}) {         a := reflect.TypeOf(i)        //var typ reflect.Type = a        b := make (a, 10)    //10 elem with type of i        //b := new (typ)        fmt.Printf ("a: %v b: %v", a, b)}prog.go:21:14: a 不是类型我尝试了各种反射组合,但到目前为止没有帮助。在我看来,这可能是一个常见的问题。我该如何解决/解决这个问题?
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

获取给定元素类型值的切片的类型v

sliceType := reflect.SliceOf(reflect.TypeOf(v))

创建一个具有长度和容量的切片(此处均为 10)。

slice:= reflect.MakeSlice(sliceType, 10, 10)

根据您的操作,您可能希望通过调用 reflect.Value 上的 Interface() 来获取实际的切片值:

s := slice.Interface()


查看完整回答
反对 回复 2023-04-04
?
SMILET

TA贡献1796条经验 获得超4个赞

就像:


b := make([]interface{}, 10)

for i := range b {

    b[i] = reflect.Zero(a)

}


查看完整回答
反对 回复 2023-04-04
  • 2 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

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