为了账号安全,请及时绑定邮箱和手机立即绑定

获取和设置任意切片的长度

获取和设置任意切片的长度

Go
达令说 2022-05-23 15:49:42
要获得任何切片的长度,我使用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]


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信