当有指向整数的指针作为动态类型时获取接口动态值
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() {
// ...
我正在努力弄清楚如何从一个接口中“提取”一个整数值,该接口包含一个动态类型为指向整数的指针的值。
您可以遵循这个 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() {
// ...