在Go中,reflect.SliceOf()的反函数是什么?

Mat*_*att 3 reflection go

在Go中,reflect.SliceOf()创建一个Type来表示给定Type的切片:

SliceOf返回元素类型为t的切片类型。例如,如果t表示int,则SliceOf(t)表示[] int。

但是,我已经有一个Type,[]int但是想要获得Type int。有没有简单的方法可以做到这一点?(请注意,我只是int作为示例。实际上,我所知道的是我有一个切片,并且我需要找到切片的每个元素是什么Type。)

我正在尝试[]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
    }
}
Run Code Online (Sandbox Code Playgroud)

但是为了填写切片,我需要知道我要填写的切片的类型...

Kyl*_*ons 5

在您的情况下,您已经具有元素类型:structField.Type()。您可以reflect.New(t).Elem()用来获取类型的“可编辑” reflect.Value。填充该值后,您可以调用slice.Index(i).Set(...)将该值分配到结果切片中。

不过,要回答问题的字母,如果您确实有一个切片并且需要填充它,则说您有一个reflect.Typea []int,那么您可以致电.Elem()获取reflect.Typefor int

有关可以调用类型的方法,请参见类型文档。