重现相同类型的数组

时间:2015-07-10 20:31:29

标签: arrays data-structures go slice

我想编写一个接收数组(字符串,int或其他)的程序,并创建另一个相同类型的数组,只包含第一个元素。

例如:

表示字符串数组arr := []string("hello", "world")

我的输出是arr2 := []string(arr[0]);

我无法使用复制功能,因为要做到这一点,我必须为它创建(制作)新切片。在这种情况下,我仍然需要发现第一个数组是哪个类型(string,int,bool等等)

也许我可以使用reflect.TypeOf()但我仍然不知道如何使用该信息来创建相同类型的切片或数组。

我没有考虑使用条件。 例如:

if reflect.TypeOf(arr) == []int {
   arr := []int(arr[0])
} else if reflect.TypeOf(arr) == []string
   arr := []string(arr[0])
} ...

我很乐意在那里得到帮助。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

你可以将它放在原位:

s2 := s1[0:1]

但是如果你真的需要创建一个新的切片,你可以这样做:

func f(s interface{}) interface{} {
    v := reflect.ValueOf(s)
    t := v.Type()
    res := reflect.MakeSlice(t, 1, 1)
    res.Index(0).Set(v.Index(0))
    return res.Interface()
}

游乐场:http://play.golang.org/p/w1N3pgvAwr