【发布时间】:2015-12-29 15:48:27
【问题描述】:
我阅读了reflect document,但我有点困惑为什么它没有 func (v Value) Slice() slice 函数,该函数可以从包含切片的 reflect.Value 中获取基础值。
有没有一种方便的方法可以从 reflect.Value 获取底层切片?
【问题讨论】:
标签: reflection go
我阅读了reflect document,但我有点困惑为什么它没有 func (v Value) Slice() slice 函数,该函数可以从包含切片的 reflect.Value 中获取基础值。
有没有一种方便的方法可以从 reflect.Value 获取底层切片?
【问题讨论】:
标签: reflection go
reflect.Value 上没有 Slice() []T 方法,因为没有对所有切片类型都有效的返回值。例如,Slice() []int 仅适用于 int 切片,Slice() []string 适用于字符串切片等。Slice() []interface{} 也不起作用,due to how the slice is stored in memory。
相反,您可以使用reflect.Value.Interface() 方法和type assertion 来获取底层切片值:
示例用法:
slice, ok := value.Interface().([]SliceElemType)
if !ok {
panic("value not a []MySliceType")
}
【讨论】:
Bytes() []bytes。 reflect.Value 上的 Slice 方法返回 Value,这不是原始类型。我已经在回答中澄清了这一点。
Slice() []<my type> 这样的快捷功能,而是功能齐全的api。恕我直言。