如何将任何 Go 变量传递给接受 void * 的 C 函数?
How to pass any Go variable into a C function that accepts a void *?
我在 C
中有以下函数 set
:
void set(void *data)
{
// do some work with data (which points to a Go variable)
}
现在,在 Go
中,我需要一个函数接受任何变量作为参数并调用 C
函数 set
将此参数传递给它。我怎样才能做到这一点?我们可以通过让 Go
函数接受像 data interface{}
这样的参数,调用 unsafe.Pointer
传递这个参数,然后用 [=18] 的结果调用 C
函数来做到这一点吗? =]?
只要您遵循 CGO 文档 passing pointers 部分中详述的约束,您就可以创建一个接受空接口参数的 Go 包装函数,并使用 [=11= 提取指针值].
func Set(i interface{}) {
C.set(unsafe.Pointer(reflect.ValueOf(i).Pointer()))
}
我在 C
中有以下函数 set
:
void set(void *data)
{
// do some work with data (which points to a Go variable)
}
现在,在 Go
中,我需要一个函数接受任何变量作为参数并调用 C
函数 set
将此参数传递给它。我怎样才能做到这一点?我们可以通过让 Go
函数接受像 data interface{}
这样的参数,调用 unsafe.Pointer
传递这个参数,然后用 [=18] 的结果调用 C
函数来做到这一点吗? =]?
只要您遵循 CGO 文档 passing pointers 部分中详述的约束,您就可以创建一个接受空接口参数的 Go 包装函数,并使用 [=11= 提取指针值].
func Set(i interface{}) {
C.set(unsafe.Pointer(reflect.ValueOf(i).Pointer()))
}