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

我正在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*A


type A struct {

    a int

}


func (a *A) method1(){

    fmt.Println("Hello world")

}


阿波罗的战车
浏览 162回答 1
1回答

炎炎设计

简短的回答:你真的不能。更长的答案是,因为Go是垃圾回收的,你可以将指针传递给C,但它必须C必须保留这个属性:C不应该在Go内存中存储任何Go指针,即使是暂时的,并且在调用返回后可能不会保留Go指针的副本。您可以在 cgo 文档中阅读有关处理和用法的更多信息,https://golang.org/cmd/cgo/#hdr-Passing_pointers,这也许可以帮助您使用用例。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go