复制相同类型的数组

Reproducing an array of same type

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

例如:

对于字符串数组 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])
} ...

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

您可以就地对其进行子切片:

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.