我使用 cgo 与 Go 中的 C 代码交互,并且需要使用指向对象中基础值的指针来调用 C 函数Interface{}
。该值将是任何原子基元类型(不包括complex64
/ complex128
)或string
。
我希望我能够做这样的事情来获取ptr
以下地址unsafe.Pointer
:
unsafe.Pointer(reflect.ValueOf(ptr).UnsafeAddr())
但这会导致恐慌,因为该值无法寻址。
已知该值将始终是上面指定的类型之一(最多为 64 位),并且我只需要将这个值赋予 C 函数即可。请注意,有多个 C 函数,并且将根据不同的不相关参数调用不同的函数。
我还尝试使用类型 switch 语句来解决这个问题,但是我发现即使在类型断言完成之后我也无法获取值的地址。我能够将值分配给临时副本,然后获取这些副本的地址,但如果可能的话,我宁愿避免制作这些副本。
宝慕林4294392
相关分类