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

要获得任何切片的长度,我使用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切片指针?


达令说
浏览 130回答 1
1回答

饮歌长啸

编写函数以使用指向切片参数的指针。// 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 3fmt.Println(slice) // prints [1 2]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go