Pointers 将reflect.AppendSlice的结果分配给指针
我很难将这段代码转换成一个更通用的版本,它接受Pointers 将reflect.AppendSlice的结果分配给指针,pointers,go,reflection,types,go-reflect,Pointers,Go,Reflection,Types,Go Reflect,我很难将这段代码转换成一个更通用的版本,它接受interface{}作为输入参数,而这段代码实际上是一个切片上的左旋转 func rotate(a *[]int, i int) { x, b := (*a)[:i], (*a)[i:] *a = append(b, x...) } 我对最后的任务有困难: func rotateSlice(a interface{}, i int) { v := reflect.ValueOf(a) x, b := v.Elem(
interface{}
作为输入参数,而这段代码实际上是一个切片上的左旋转
func rotate(a *[]int, i int) {
x, b := (*a)[:i], (*a)[i:]
*a = append(b, x...)
}
我对最后的任务有困难:
func rotateSlice(a interface{}, i int) {
v := reflect.ValueOf(a)
x, b := v.Elem().Slice(0, i), v.Elem().Slice(i, v.Elem().Len())
*a = reflect.AppendSlice(b, x)
}
错误消息是(类型{})的无效间接类型。a
的值是interface{}
,因此*a=
将把右边的值分配给指针指向的空间。我对AppendSlice
的调用返回Value
。我不确定类型断言需要发生在哪里,我想是在左侧?用于设置切片中的值
func rotateSlice(a interface{}, i int) {
v := reflect.ValueOf(a).Elem()
x, b := v.Slice(0, i), v.Slice(i, v.Len())
v.Set(reflect.AppendSlice(b, x))
}
func rotateSlice(a interface{}, i int) {
v := reflect.ValueOf(a).Elem()
x, b := v.Slice(0, i), v.Slice(i, v.Len())
v.Set(reflect.AppendSlice(b, x))
}
使用指向切片的指针调用函数:
a := []string{"a", "b", "c", "d"}
roateSlice(&a, 2)
用于设置切片中的值
func rotateSlice(a interface{}, i int) {
v := reflect.ValueOf(a).Elem()
x, b := v.Slice(0, i), v.Slice(i, v.Len())
v.Set(reflect.AppendSlice(b, x))
}
func rotateSlice(a interface{}, i int) {
v := reflect.ValueOf(a).Elem()
x, b := v.Slice(0, i), v.Slice(i, v.Len())
v.Set(reflect.AppendSlice(b, x))
}
使用指向切片的指针调用函数:
a := []string{"a", "b", "c", "d"}
roateSlice(&a, 2)
a
是一个接口{}
不是指针,因此不能取消对它的引用。即使有指向切片的指针,也无法为reflect.AppendSlice
的结果赋值,因为它返回类型reflect.Value
。您需要通过设置值
a
是一个接口{}
不是指针,因此不能取消对它的引用。即使有指向切片的指针,也无法为reflect.AppendSlice
的结果赋值,因为它返回类型reflect.Value
。您需要通过设置值