【问题标题】:How to get slice underlying value via reflect.Value如何通过 reflect.Value 获取切片底层价值
【发布时间】:2015-12-29 15:48:27
【问题描述】:

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

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

【问题讨论】:

    标签: reflection go


    【解决方案1】:

    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")
    }
    

    【讨论】:

    • @mh-cbon:OP 正在寻找一个返回底层类型切片的 Slice 方法,有点像 Bytes() []bytesreflect.Value 上的 Slice 方法返回 Value,这不是原始类型。我已经在回答中澄清了这一点。
    • 我认为这个答案具有误导性,应该澄清反射提供的功能确实可以处理切片,但是由于与类型系统相关的原因,没有诸如 Slice() []<my type> 这样的快捷功能,而是功能齐全的api。恕我直言。
    猜你喜欢
    • 2013-08-08
    • 2016-08-10
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 2014-08-13
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多