当前位置: 首页 > 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零抽象的一个具体体现吧.

http://www.dtcms.com/a/153016.html

相关文章:

  • 查看系统是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)
  • 【华为HCIP | 华为数通工程师】821—多选解析—第十五页
  • m365是什么,和o365的区别
  • 自动化标注软件解析
  • 多回路电表如何革新电力监控?安科瑞技术深度解析
  • linux:启动后,ubuntu屏幕变成红色了
  • 从平台工程视角出发,重塑云原生后端的工程体系
  • 电商热点数据哈希槽分片案例:双11秒杀场景设计
  • 陪诊陪检系统源码,陪诊小程序,陪诊APP,陪诊服务,家政上门系统,居家护理陪护源码,医护小程序
  • 学员答题pk知识竞赛小程序怎么做
  • WPS右键菜单中“上传到云文档”消失,使用命令行注册解决