Arrays 复制相同类型的数组

Arrays 复制相同类型的数组,arrays,data-structures,go,slice,Arrays,Data Structures,Go,Slice,我想编写一个程序,接收一个数组(字符串、int或其他类型),并创建另一个相同类型的数组,该数组只包含第一个元素 例如: if reflect.TypeOf(arr) == []int { arr := []int(arr[0]) } else if reflect.TypeOf(arr) == []string arr := []string(arr[0]) } ... 对于字符串数组arr:=[]字符串(“你好”,“世界”) 我的输出将是arr2:=[]字符串(arr[0]) 我

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

例如:

if reflect.TypeOf(arr) == []int {
   arr := []int(arr[0])
} else if reflect.TypeOf(arr) == []string
   arr := []string(arr[0])
} ...
对于字符串数组
arr:=[]字符串(“你好”,“世界”)

我的输出将是
arr2:=[]字符串(arr[0])

我不能使用copy函数,因为要这样做,我必须为它创建(制作)一个新的切片。在这种情况下,我仍然需要发现第一个数组是哪种类型(字符串、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()
}

操场:。

谢谢。我确实尝试过使用s2:=s1[:1],但在运动场上,我得到了一个错误。但是我现在在我的电脑上试过了,是的,这个解决方案很好用!再次感谢。