登录
首页 >  Golang >  Go问答

传递任何 Go 变量给接受 void * 的 C 函数的方法

来源:stackoverflow

时间:2024-02-19 16:24:16 424浏览 收藏

你在学习Golang相关的知识吗?本文《传递任何 Go 变量给接受 void * 的 C 函数的方法》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我在 c 中有以下函数 set

void set(void *data)
{
    // do some work with data (which points to a Go variable)
}

现在,在 go 中,我需要一个函数接受任何变量作为参数,并调用 c 函数 set 将此参数传递给它。我怎样才能做到这一点?我们可以通过让 go 函数接受 data 接口{} 之类的参数,调用 unsafe.pointer 传递此参数,然后使用 unsafe.pointer 的结果调用 c 函数来实现吗?


正确答案


只要遵循 cgo 文档 passing pointers 部分中详细说明的约束,您就可以创建接受空接口参数的 go 包装函数,并使用 reflect 提取指针值。

func Set(i interface{}) {
    C.set(unsafe.Pointer(reflect.ValueOf(i).Pointer()))
}

今天关于《传递任何 Go 变量给接受 void * 的 C 函数的方法》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>