在Go中,reflect.SliceOf()
生成一个Type,表示给定Type的切片:
SliceOf返回元素类型为t的切片类型。例如,如果t表示int,则SliceOf(t)表示[] int。
但是,我已经有[]int
的类型,但希望获得int
的类型。有一个简单的方法吗? (注意,我使用int
作为示例。实际上,我所知道的是我有一个切片,我需要找到切片的每个元素的类型。)
我正在尝试使用反射从[]string
填充一片bool,int,float或string ...这是相关的部分:
numElems := len(req.Form["keyName"])
if structField.Kind() == reflect.Slice && numElems > 0 {
slice := reflect.MakeSlice(structField.Type(), numElems, numElems)
for i := 0; i < numElems; i++ {
// I have some other code here to fill out the slice
}
}
但为了填写切片,我需要知道我填写的切片的类型......
答案 0 :(得分:5)
在您的情况下,您已经拥有元素类型:structField.Type()
。您可以使用reflect.New(t).Elem()
获取某种类型的“可编辑”reflect.Value
。填充该值后,您可以调用slice.Index(i).Set(...)
将该值分配给生成的切片。
要回答问题的字母,如果你有一个切片并需要填充它,假设你有reflect.Type
[]int
,那么你可以致电.Elem()
获取reflect.Type
的{{1}}。
有关您可以在类型上调用的方法,请参阅Type文档。