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

时间:2014-01-27 03:40:58

标签: reflection go

在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
    }
}

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

1 个答案:

答案 0 :(得分:5)

在您的情况下,您已经拥有元素类型:structField.Type()。您可以使用reflect.New(t).Elem()获取某种类型的“可编辑”reflect.Value。填充该值后,您可以调用slice.Index(i).Set(...)将该值分配给生成的切片。

要回答问题的字母,如果你有一个切片并需要填充它,假设你有reflect.Type []int,那么你可以致电.Elem()获取reflect.Type的{​​{1}}。

有关您可以在类型上调用的方法,请参阅Type文档。