首页 > 解决方案 > 如何在运行时创建具有指定类型的元素数组

问题描述

我正在尝试创建一个只有在运行时才知道类型的元素数组(pkg API 可以检索 json 中的元素并转换为 struct)。我有一个类似下面的辅助函数,它将接口作为参数并在调用 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 不是类型

我尝试了反射的各种组合,但到目前为止没有任何帮助。在我看来,这可能是一个常见的问题。我该如何解决/解决这个问题?

标签: gostruct

解决方案


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

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

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

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

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

s := slice.Interface()

在操场上运行它


推荐阅读