簡體   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