我正在尝试创建一个元素数组,其类型仅在运行时已知(pkg API 获取 json 中的元素并转换为结构)。我有一个类似下面的辅助函数,它将一个接口(interface)作为参数,并在调用 make 时尝试获取接口(interface)的类型。
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 不是类型
我尝试了反射的各种组合,但到目前为止没有帮助。 在我看来,这可能是一个常见的问题。我该如何解决/解决这个问题?
最佳答案
在给定元素类型 v
的值的情况下获取 slice 的类型:
sliceType := reflect.SliceOf(reflect.TypeOf(v))
创建一个具有长度和容量的 slice (此处均为 10)。
slice:= reflect.MakeSlice(sliceType, 10, 10)
根据您的操作,您可能希望通过调用 reflect.Value 上的 Interface() 来获取实际的 slice 值:
s := slice.Interface()
关于go - 如何制作运行时指定类型的元素数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52396248/