我试图创建一个只有在运行时才知道类型的元素数组(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不是类型
我尝试了各种反射组合,但到目前为止没有帮助。 在我看来,这可能是一个常见的问题。我该如何解决/解决这个问题?
答案 0 :(得分:4)
获取给定元素类型值为v
的切片的类型:
sliceType := reflect.SliceOf(reflect.TypeOf(v))
创建一个具有长度和容量的切片(此处均为10)。
slice:= reflect.MakeSlice(sliceType, 10, 10)
根据您正在执行的操作,您可能需要通过在reflect.Value上调用Interface()来获取实际的切片值:
s := slice.Interface()
答案 1 :(得分:2)
就像这样:
b := make([]interface{}, 10)
for i := range b {
b[i] = reflect.Zero(a)
}