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

如何在go语言中调用c语言代码

1.安装c语言编译器

        要使用cgo,需要安装c语言编译器 gcc

2.检查CGO_ENABLED时候开启

       使用以下命令查看:

go env CGO_ENABLED

        如果go env CGO_ENABLED被禁用(为0),需要将其设置为开启(为1)

        

3.编写c语言程序,并用go语言调用c语言程序

        1)以下是一段示例代码:

package main/*#include <stdio.h>        //  序文中可以链接标准C程序库void myPrint(){printf("hello world!\n");}
*/
import "C" //通过 import “C” 语句启用 CGO 特性后,CGO 会将上一行代码所处注释块的内容视为 C 代码块,被称为序文(preamble)。func main() {C.myPrint()
}

        2)注意事项:

                (1)c语言代码应直接写入在import "C" 之上的注释中,这个注释具有特殊的含义(专门用来表示c语言代码)

                 (2)如果我们的c语言代码单独保存在一个文件中,例如hello.c

                        那么我们可以在import "C"之上添加#include <hello.c>来引用hello.c文件

                        main.go示例代码

package mainimport "C"//#include <stdio.h>        //  序文中可以链接标准C程序库
//#include <hello.c>
import "C" //通过 import “C” 语句启用 CGO 特性后,CGO 会将上一行代码所处注释块的内容视为 C 代码块,被称为序文(preamble)。func main() {C.print()
}

                        hello.c示例代码

#include <stdio.h>void print(){printf("hello world!\n");
}

                         运行结果

                 (3)一般情况下,使用纯 Go 代码编写的程序在性能上往往会优于使用 cgo 来集成 C 代码的程序。这是因为在调用 C 函数时需要进行跨语言调用和数据转换,这会导致额外的开销。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CTF-web-攻防世界-3
  • IT廉连看——UniApp——事件绑定
  • 使用FFmpeg推流实现在B站24小时点歌直播
  • 电路仿真软件:点亮教学新篇章,十大便利助力高效学习
  • -FIT5197
  • 基于Kafka的日志采集
  • ArcGIS提取含有计曲线的等高线
  • 设置环境变量,忽略yarn对node的版本检查
  • 行业分析---造车新势力之蔚来汽车
  • [力扣题解] 463. 岛屿的周长
  • 解释JAVA语言中关于方法的重载
  • JMeter正则表达式提取器和JSON提取器基础用法,小白必会!
  • [BT]小迪安全2023学习笔记(第29天:Web攻防-SQL注入)
  • 第一章:操作系统概述
  • CSDN 自动评论互动脚本
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 30秒的PHP代码片段(1)数组 - Array
  • 345-反转字符串中的元音字母
  • Gradle 5.0 正式版发布
  • HTML-表单
  • JavaScript服务器推送技术之 WebSocket
  • js数组之filter
  • Mybatis初体验
  • mysql 5.6 原生Online DDL解析
  • Vue.js源码(2):初探List Rendering
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 分布式熔断降级平台aegis
  • 服务器从安装到部署全过程(二)
  • 关于使用markdown的方法(引自CSDN教程)
  • 计算机在识别图像时“看到”了什么?
  • 模型微调
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​Python 3 新特性:类型注解
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (12)目标检测_SSD基于pytorch搭建代码
  • (152)时序收敛--->(02)时序收敛二
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (六)Hibernate的二级缓存
  • (三)docker:Dockerfile构建容器运行jar包
  • (十八)三元表达式和列表解析
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (原)本想说脏话,奈何已放下
  • (转)程序员技术练级攻略
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转)树状数组
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET CORE Aws S3 使用
  • .net core 的缓存方案