Golang中能否将Java的回调函数作为参数传递?
Golang中能否将Java的回调函数作为参数传递? 我的目标:我想从 Go 向 Java 发送数据。
我正在使用 gomobile bind 为 Android 生成绑定。我有一个用例,希望在 Go 中编写并导出一个函数,该函数接受一个简单的函数作为参数,如下所示:
func SetCallback(cb Callback)
其中 Callback 是一个用户定义的类型:
type Callback func(string)
然而,gomobile bind 无法为此函数生成 Java 绑定。我也尝试过不定义 Callback 类型直接这样做:
func SetCallback(cb func(string))
但没有成功。是否有其他方法可以实现这个功能?
更多关于Golang中能否将Java的回调函数作为参数传递?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
我认为你无法直接做到这一点。Java 和 Go 拥有不同的运行时环境,它们的内存布局也不同。Java 的垃圾回收器无法回收从 Go 分配的对象,它根本做不到。它们只是采用了不同的方式来进行垃圾回收。Java 中的字符串也与 Go 中的字符串不同。Java 中的函数也与 Go 中的函数不同。它们的代码表示形式也不同。
但是,它们确实都提供了对 C 语言的 FFI。Go 可以使用 CGo 调用 C 代码(需要一些调整),Java 也可以使用 Java JNI 调用 C 代码(同样需要一些调整)。你或许可以从 Java 调用 C,然后从那个 C 代码中调用 Go。但这可能会非常棘手,难以调试,并且难以维护。
更多关于Golang中能否将Java的回调函数作为参数传递?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


