python调用golang并回调

本文详细介绍了如何在Python中调用Golang函数并实现回调。主要难点在于Python通过C作为桥梁与Golang交互,Golang接收到的是C的函数指针,需要通过C函数转换回Golang可调用的形态。文章提到了分三个文件进行编译,以及编译时的注意事项,并列举了参考资源。
摘要由CSDN通过智能技术生成

最近折腾python交互,也真够呛的,一连玩了好几天,被虐的不要不要的。天天各种百度,Google之间。

好吧,废话少说,转入我们的正题。其实,py调用go一般的函数,只是第一道坎,正主其实是py调用go,并且go还回调py!!!

网上其实这些问题很少,而且有且只有一篇关于go回调py的。

就是如下一位大兄弟写的:https://www.golangtc.com/t/59f858c04ce40d3bf47f5fbc


虽说他是说解决了,问题是下面的解决方案写的真心有问题啊。。。其实,py调用go,他们是通过c来进行桥接(应该是这么说吧),py<——>c<——>go,就是说,py一直认为自己是调用c,go也是如此,并不知其实他们是在互相操作。。。

那么,好办了,py调用go并且回调,在py侧,只要按照py调用c,并且回调就可以了。go侧则go调用c,并且回调c,就可以了。

其实py侧很简单,随便百度一下,应该是正确的。上面那大兄弟写的方法就可以了。问题是go侧,真心坑。。。


当py传入自己的回调,其实是被c包装了一下,然后,go这边接收的其实就是一个c的函数指针!在go里面,c的函数指针,其实就是一个unsafe.Pointer,一个unsafe.Pointer,一个unsafe.Pointer,重要的事情说三次!!!但go获得这东西,它只知道是一个地址啊,不知道是一个什么东西。。。好吧,只能把它重新转回c的函数指针,但这个过程必须要靠一个c函数做过渡!!!!


然而,这样就出现一个坑了!!!那个c函数定义,居然不能跟导出的go函数写在同一个go文件里面!!!否则,

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值