我想编写一个接收数组(字符串,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])
} ...
我很乐意在那里得到帮助。 提前谢谢。
答案 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()
}