当前位置: 首页 > news >正文

golang的cgo的一点小心得

最后有个项目需要涉及到cgo,在这块以前用的不多,

这次略微用得深入了一点,记下来几点以备以后使用

本质上cgo去用的时候就是遵守一些ABI而已,总体而言,尽量避免复杂结构的来回传递。1  对于变长参数,只有写一个个c的方法,比如static方法wrap一下成非变长的,当然这样罗嗦但是没办法
2 对于enum,可直接使用,c语言的void*对应着unsafe.Pointer3 比较复杂的是对于需要传一个函数指针/回调函数的,只有走曲线救国的路线,即传一个c写的wrap->调用go export的的方法(其实就是通过//export导出加_cgo_export.h即可让c使
用),排查问题的时候可通过-work保留中间生成的.h文件。当然在这之上略微进阶一点是玩个trampoline,其实注是加了个中间层,这样可以支持go的闭包。 4 库的加载自己采用pkg-config(macos/linux上都可以,windows不可以),即macos上开发,docker(linux)跑。

后话:

       为了玩这个,我找了个开源的好好读了一下,同时为了更深入一点,把别人的c代码也读了一下,同时为了更好玩,我选择了Rust(这个也是我喜欢玩的语言之一,但是要看场景 ),Rust的FFI的话那确实是更适合做这种绑定,更别说Rust更鼓励做static而不是share的库,可能背后也跟golang有自己的运行时,和c其实映射上也做不到rust那样简单,或许这就是rust零抽象的一个具体体现吧.

相关文章:

  • 查看系统是debian还是redhat
  • 工业自动化中的高效桥梁:EtherCAT转Profinet网关在封装环节的应用
  • Qwen2.5简要全流程以及QA
  • 5.第五章:数据分类的方法论
  • 实时操作系统在服务型机器人中的关键作用
  • 航电系统之信息融合技术篇
  • React+TypeScript:现代化前端路由导航系统开发详解
  • 机器学习中的特征存储是什么?我需要一个吗?
  • PC接入deepseek
  • 【数据可视化-29】食物营养成分数据可视化分析
  • Qt C++/Go/Python 面试题(持续更新)
  • MySQL的图形管理工具-MySQL Workbench的下载安装及使用【保姆级】
  • [Redis] Redis最佳实践
  • 【Ubuntu】提升 docker ps -a 输出的可读性:让 Docker 容器状态更清晰
  • K8S学习路线图:从入门到精通的技术成长指南
  • 图像可视化
  • PCB常见封装类型
  • RSUniVLM论文精读
  • 【深度】如何通过MCP实现多智能体之间的协同
  • IDEA导入并启动若依项目步骤(SpringBoot+Vue3)
  • “80后”李岩已任安徽安庆市领导
  • 巴基斯坦最近“比较烦”:遣返阿富汗人或致地区局势更加动荡
  • 京东美团商战,能惠及骑手吗?
  • 一场12年的马拉松,他用声音陪伴中国路跑成长
  • 北京地铁5号线仗义执言女乘客发文:同理心无比重要,希望就此平息
  • 国产手术机器人+5G技术,上海医生同一天远程为五地患者开刀