如何通过 reflect.Value 获取切片底层价值

How to get slice underlying value via reflect.Value

我读了 reflect document 但我有点困惑为什么它没有 func (v Value) Slice() slice 函数,该函数从 reflect.Value 中获取基础值一片。

有没有方便的方法从 reflect.Value 获取底层切片?

reflect.Value 上没有 Slice() []T 方法,因为没有 return 值对所有切片类型都有效。例如,Slice() []int 仅适用于 int 切片,Slice() []string 适用于字符串切片等。Slice() []interface{} 也不起作用,due to how the slice is stored in memory.

相反,您可以使用 reflect.Value.Interface() method along with a type assertion:

获取基础切片值

用法示例:

slice, ok := value.Interface().([]SliceElemType)
if !ok {
    panic("value not a []MySliceType")
}