繁体   English   中英

如何通过 CGo 将 Go 回调(函数 ptr)从 Go 传递到 Rust?

[英]How do I pass a Go callback (function ptr) from Go to Rust via CGo?

我有:

  • 编译为静态 C 库的 Rust 库
  • 通过 CGo 调用 Rust 库 API 的 Go 程序

我希望将一个 Go 函数(作为回调)传递给 Rust 代码,这样它就能够在运行时将日志发送回我的 Go 程序,当它的库 API 被执行时。 比如发送 cb 地址并将其保存在我已经编译的 Rust 代码中。

我已经检查了一些例子,其中 Go 使用 CGo 将 cb 传递给 C,C 调用它并且它确实有效。 但是我无法思考如何将其传输到 Rust 代码,就好像我在 C 接口方面被“停止”了一样。

我唯一能想到的就是在 Rust 的库中声明一个可变的空全局变量,并通过将 cb 作为 Go 端的参数传递给它来分配 Go cb。

这有意义吗? 还有其他建议吗?

不要将此 go 回调传递给另一种编程语言。 如果我猜对了,你应该提供一个 cgo 函数,比如

invokeGoCallback( funcID, arg1, arg2)

你可以将你的回调作为 funcID 传递给 C,你的 go 代码知道。 然后当 C 想要调用这个函数时,用那个 funcID 调用invokeGoCallback

那我们来讨论一下,为什么?

和 C 调用它,它确实有效。

深入了解 cgo 的工作原理,您会知道在 C 堆栈中调用 go 函数需要环境。 请参阅此链接_cgo_runtime_cgocall

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM