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

GO语言篇之CGO

GO语言篇之CGO

文章目录

  • GO语言篇之CGO
    • 前言
    • C代码嵌入GO代码
    • C文件嵌入GO代码
    • 缺点

前言

Go语言可以通过内置的CGO调用C语言接口,从而实现C语言代码的交互,CGO提供了一种将Go代码嵌入到C代码中,或者从Go代码中调用C函数的方法

C代码嵌入GO代码

package main/*
// 注意C代码要以注释的形式存在#include <stdio.h>static void SayHello(const char* s) {puts(s);
}
*/
import "C"func main() {C.SayHello(C.CString("Hello CGO"))
}

C文件嵌入GO代码

目录结构,注意c代码文件和main.go处于同一级别
目录结构

// clib.c
#include <stdio.h>void SayHello(const char* s) {puts(s);
}
// main.go
package main//声明引用的C函数//void SayHello(const char* s);
import "C"func main() {C.SayHello(C.CString("Hello CGO"))
}

缺点

  1. 性能损失:CGO中存在Go代码和C代码之间内存分配和拷贝,及函数调用的开销,这可能导致性能下降,特别是频繁调用的函数
  2. 复杂性增加:CGO需要熟悉C和Go两种语言,并理解它们之间的交互,和纯粹的Go开发相比,CGO具有更高的复杂度和学习曲线
  3. 平台依赖性:因为C代码可能依赖于特定的操作系统或编译器特性,因此CGO可能在不同平台上表现不一致
  4. 调试困难:因为CGO涉及C,Go间的交互,错误可能发生在C代码或Go代码中的任何地方,导致调试变得更加困难
  5. 安全性问题:Go代码调用C代码中访问底层系统资源,执行不受Go语言安全保护的操作,这可能增加代码中的安全风险
http://www.lryc.cn/news/164088.html

相关文章:

  • LVS负载均衡群集(NAT模式、IP隧道模式、DR模式)
  • PCL 使用克拉默法则进行三点定圆(二维)
  • MCAL实战二(S32K324-NXP EB tresos GPT驱动配置详解)
  • Python 图形化界面基础篇:什么是 Tkinter 以及为什么选择它
  • Learning From Data 中英文对照 1.THE LEARNING PROBLEM (第7页)
  • 自己编译静态ffmpeg freetype2 not found问题解决
  • 基于 Python 的音乐流派分类
  • 代码随想录训练营第49天|121.买卖股票的最佳时机,122.买卖股票的最佳时机II
  • 1-3 AUTOSAR软件架构
  • Dajngo02_第一个Django案例
  • R语言分析糖尿病数据:多元线性模型、MANOVA、决策树、典型判别分析、HE图、Box's M检验可视化...
  • 有效回文字符串(Valid palindrome)
  • 9月9日,每日信息差
  • Java——》synchronized编译
  • vue3使用el-form实现登录、注册功能,且进行表单验证(Element Plus中的el-form)
  • 12个微服务架构模式最佳实践
  • 快速搭建:对象存储平台MinIO
  • Nomad 系列-Nomad+Traefik+Tailscale 集成实现零信任安全
  • (二十一)大数据实战——Flume数据采集之复制和多路复用案例实战
  • VM安装RedHat7虚机ens33网络不显示IP问题解决
  • Leetcode 第 362 场周赛题解
  • 蓝桥杯官网练习题(0的个数)
  • 计算线段上距离线段外某一点最近的点
  • 港联证券股票分析:经济拐点显现 积极提升仓位
  • 不同的图像质量评价指标(IQA)
  • linux命令-tar 命令
  • selenium元素定位---ElementClickInterceptedException(元素点击交互异常)解决方法
  • 05_css选择器的使用
  • 跨平台游戏引擎 Axmol-2.0.0 正式发布
  • 面试总结归纳