为了账号安全,请及时绑定邮箱和手机立即绑定

通过“cgo”将 Go 指针作为键传递

通过“cgo”将 Go 指针作为键传递

Go
阿波罗的战车 2022-08-30 21:53:15
我正在Go和Python之间做一些互操作。我计划在Go领域创建对象,并且只能通过Go方法从Python访问它们。例如,以下内容只会在 Go 土地上创建和销毁,并且只能通过 访问。但是Python代码确实需要知道句柄/指针到实例,这样当它将此句柄/指针传递给Go函数时,Go函数知道将其转换为Go指针并调用其方法。换句话说,Python不直接使用Go指针作为引用/取消引用内存的指针,而是将其用作识别Go对象的键。struct Amethod1struct A*A问题是它无效,我不能直接在cgo方法之间传递。int(a)var a *A*A我能做些什么,以便我可以转换为某个黑匣子键,这是一个整数,然后将其转换回?*A*Atype A struct {    a int}func (a *A) method1(){    fmt.Println("Hello world")}
查看完整描述

1 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

简短的回答:你真的不能。

更长的答案是,因为Go是垃圾回收的,你可以将指针传递给C,但它必须C必须保留这个属性:C不应该在Go内存中存储任何Go指针,即使是暂时的,并且在调用返回后可能不会保留Go指针的副本。

您可以在 cgo 文档中阅读有关处理和用法的更多信息,https://golang.org/cmd/cgo/#hdr-Passing_pointers,这也许可以帮助您使用用例。


查看完整回答
反对 回复 2022-08-30
  • 1 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信