我正在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,这也许可以帮助您使用用例。
- 1 回答
- 0 关注
- 156 浏览
添加回答
举报
0/150
提交
取消