如何将任何 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()))
}