当有指向整数的指针作为动态类型时获取接口动态值

Get inteface's dynamic value when there is a pointer to integer as dinamic type

我正在努力弄清楚如何从一个接口中“提取”一个整数值,该接口包含一个动态类型为指向整数的指针的值。

您可以遵循这个 ready-to-run 示例,以便完全了解问题所在和我的意图。

TD;DR:

出于某种原因,在动态类型为整数指针的接口上首次调用 reflect.ValueOf(value) 时的反射,它 returns 一个值 Kind() 结果为 reflect.Ptr,当我使用 reflect.ValueOf(value).Elem() 再次提取“内部”值时,我得到另一个值,其 Kind() 结果为 reflect.Struct。我什至没有编写任何结构代码,但它们会“神奇地”出现。所以 golang 可能不会恐慌,但我不明白发生了什么,可能我缺少一些信息。如果有人能向我解释发生了什么,我将非常感激。

可能适用于这种情况,但它并没有启发我。我希望在指针“后面”有一个整数值。我不需要访问修改,我只需要获取它。

它是结构体,因为当您在函数内部调用 ToCompliantValue 时,您并没有将值本身传递给它,而是传递了一个 reflect.Value 值,而 reflect.Value 是一个结构。你必须直接处理它而不是尝试使用递归:

v := reflect.ValueOf(value)
fmt.Printf("Value is %+v\n", v)
if v.Kind() == reflect.Ptr {
    v = v.Elem()
}
switch v.Kind() {
    // ...

工作示例:https://play.golang.org/p/ndRjXJfj5xV