当前位置: 首页 > 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.xdnf.cn/news/123319.html

相关文章:

  • 智能电网第5期 | 老旧电力设备智能化改造:协议转换与边缘计算
  • Spring Boot默认缓存管理
  • 第J5周:DenseNet+SE-Net实战
  • 手机端本地服务与后端微服务的技术差异
  • 模板元编程(Template Metaprogramming, TMP)
  • Redis 完整配置模板
  • 【UML建模】starUML工具
  • 房地产安装工程师简历模板
  • BBRv2,v3 吞吐为什么不如 BBRv1
  • Python元组全面解析:从基础到高级应用指南
  • AI文生图模型对比
  • 详解数据存储中的端到端数据校验技术
  • .NETCore部署流程
  • Caffeine 深度解析:从核心原理到生产实践
  • 保安员理论考试要点总结
  • 如何初入学习编程包含学习流程图
  • 多路转接epoll原理详解
  • SLAM常用地图对比示例
  • OSI七层模型和TCP/IP四层模型
  • Kotlin函数体详解:表达式函数体 vs 代码块函数体——使用场景与最佳实践
  • 安全生产知识竞赛活动方案流程规则
  • 西甲001:奥萨苏纳VS塞维利亚
  • 系统高性能设计核心机制图解:缓存优化、链表调度与时间轮原理
  • SSH 反向隧道访问内网服务
  • 容器修仙传 我的灵根是Pod 第9章 时空禁术(Job与CronJob)
  • gitlab-ce容器镜像源(国内)
  • go 的 net 包
  • Vue 计算属性 VS 侦听器:从原理到性能的深度对比
  • Linux 中断控制器驱动程序浅析
  • 解决ROS2安装过程中无法连接raw.githubusercontent.com的问题