[英]How do I call a Rust function from Go with a string as a parameter?
[英]How do I pass a Go callback (function ptr) from Go to Rust via CGo?
我有:
我希望将一个 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.