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

Che*_*glu 1 reflection go

我阅读了反射文档,我对它为什么没有func (v Value) Slice() slice函数感到有点困惑,这个函数从一个包含切片的reflect.Value中获取基础值.

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

Tim*_*per 7

没有Slice() []T方法,reflect.Value因为没有对所有切片类型有效的返回值.例如,由于切片存储在内存中的方式,Slice() []int仅适用于int切片,Slice() []string字符串切片等Slice() []interface{}也不起作用.

相反,您可以通过使用该reflect.Value.Interface()方法以及类型断言来获取基础切片值:

用法示例:

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