golang 反射 slice

package main

import(
    "fmt"
    "reflect"
)

func main() {
    s := make([]int,0, 4)
    s = append(s,1,2,3)
    AppendSlice(&s, 4)

    fmt.Println(s)    //  [1 2 3]  如何修改AppendSlice 函数让s 返回 [1,2,3,4]
}

func AppendSlice(i , e interface{}) {
    v := reflect.ValueOf(i)
    rv := v.Elem()
    rv = reflect.Append(rv, reflect.ValueOf(e))
    fmt.Println(v)   // &[1 2 3]
}

如何才能让s 返回 [1,2,3,4] ?

阅读 7.4k
1 个回答
func AppendSlice(i , e interface{}) {
    rv := reflect.ValueOf(i)
    rv = rv.Elem()
    rv = reflect.Append(rv, reflect.ValueOf(e))
    rt := reflect.ValueOf(i)
    rt.Elem().Set(rv)
}
最终自己找到了答案。还是使用反射,操作完之后,使用Set 操作将SlicePointer 重新设值即可。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题