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
。您需要通过设置值