【发布时间】:2017-07-26 02:23:53
【问题描述】:
给定
// I know that behind SomeInterface can hide either int or a pointer to struct
// In the real code I only have v, not i
i := something.(SomeInterface)
v := reflect.ValueOf(i)
var p uintptr
if "i is a pointer to struct" {
p = ???
}
- 在这种情况下,我需要一些方法来区分指针和值。
- 如果
i是指向结构的指针,我需要将其转换为uintptr。
到目前为止我发现的一些东西:(*reflect.Value).InterfaceData() 的第二个成员将是指向结构的指针,以防它是一个结构。如果它不是结构,我不知道它是什么。
【问题讨论】:
-
任何东西都可以实现接口,甚至是
int或string或指向不是结构的结构的指针。 -
@kopiczko 你想说什么?
-
@wvxvw:你是在问如何检查 v 的
reflect.Kind是否是一个指针?请注意,您无法将指针值正确存储在uintptr -
@wvxvw 我说过关于你的陈述:“如果它不是结构,我不知道它是什么。”
-
@kopiczko 好的,我知道现在的混乱来自哪里。我指的是
InterfaceData()返回的第二个值。我想你说的是不同的基本类型是否可以实现接口。
标签: pointers go interface casting