来自go来源的代码是什么意思?像(*(* float32)(v.ptr))

时间:2019-02-12 21:18:50

标签: go type-conversion

在反射包中,我看到了类似

的代码
    return float64(*(*float32)(v.ptr))

什么是*(* float32)(v.ptr)?我没有任何想法

1 个答案:

答案 0 :(得分:2)

让我们解开表达式。我们将从最里面到最外面,因为这是它的评估顺序:

(*float32)(v.ptr)

v.ptr转换为指向*float32的指针float32

*(*float32)(v.ptr)

取消引用该指针,为我们提供一个float32值。

float64(*(*float32)(v.ptr))

float32值转换为float64值。

因此,无论v.ptr是什么,它都将转换为float32指针,取消引用,然后转换为float64,然后返回。