要获得任何切片的长度,我使用reflect.ValueOf(slice).Len(). 要设置任何切片的长度,我使用reflect.ValueOf(&slice).Elem().SetLen(n).我的结构中有一个类型的字段reflect.Value,并且该值设置为,reflect.ValueOf(&slice)以便我可以更改切片。但现在我无法获得底层切片的长度。call of reflect.Value.Len on ptr Value它会因为如果我Len()直接打电话而感到恐慌,如果我打电话call of reflect.Value.Len on interface Value给Elem().Len().以下是我试图实现的功能:func pop(slice interface{}) interface{} { v := reflect.ValueOf(slice) length := v.Len() last := v.Index(length - 1) v.SetLen(length - 1) return last}我怎样才能同时使用refect.Value切片指针?
1 回答
饮歌长啸
TA贡献1951条经验 获得超3个赞
编写函数以使用指向切片参数的指针。
// pop removes and returns the last element from
// the slice pointed to by slicep.
func pop(slicep interface{}) interface{} {
v := reflect.ValueOf(slicep).Elem()
length := v.Len()
last := v.Index(length - 1)
v.SetLen(length - 1)
return last
}
像这样称呼它:
slice := []int{1, 2, 3}
last := pop(&slice)
fmt.Println(last) // prints 3
fmt.Println(slice) // prints [1 2]
- 1 回答
- 0 关注
- 129 浏览
添加回答
举报
0/150
提交
取消