cgo 结构体指针_cgo讲义及练习

本文介绍了Go语言通过cgo使用C语言代码的方法,包括为何使用cgo、系统配置、如何导入C代码,以及详细探讨了如何处理C语言的变量、函数、数组、指针、结构体、联合体和回调函数。通过实例展示了在Go中调用C的结构体指针操作,强调了类型转换和安全性的注意事项。
摘要由CSDN通过智能技术生成

前提条件:

了解Go语言和C语言的基本知识和基本用法。

一、什么是cgo

简单地说,cgo是在Go语言中使用C语言代码的一种方式。

二、为什么要有cgo

C语言经过数十年发展,经久不衰,各个方面的开源代码、闭源库已经非常丰富。这无疑是一块巨大的宝藏,对于一门现代编程语言而言,如何用好现成的C代码就显得极为重要。

三、如何使用

3.1 系统配置

要想使用cgo,你的计算机上必须有GCC,并且将gcc编译器的可执行文件所在的目录添加到PATH这个环境变量中。例如,我的gcc.exe在C:\mingw64\bin下,所以,要把C:\mingw64\bin这个目录添加到PATH。

3.2 C假包

我们知道,Go语言以包为代码的逻辑单元。如果要在Go代码中使用C代码,也要为C代码单独设立一个“包”并将其导入:

import "C"

C是一个假包,包的性质它一般也有。例如可以用“包名.符号名”的方式使用其中的变量或类型。

var n C.int

这行代码,定义了一个C语言int类型的变量,与用

var conn net.Conn

定义一个net.Conn类型的变量没什么语法上的不同。

如果紧挨着import "C"这行上方,加入连续若干行注释,在注释中编写C代码,这些C代码就作为C包的内容。例如:

/*

int PlusOne(int n)

{

return n + 1;

}

*/

import "C"

在Go代码中就可以调用PlusOne这个函数,再例如:

/*

#include 

*/

import "C"

在Go代码中就可以调用头文件stdio.h中的函数。

除此之外,还可以把你的C源文件放到要使用它的Go源文件的同一目录,然后在C包中包含(include)对应的头文件。例如,我有C源文件ys_origin.c和头文件ys_origin.h,而我要在ys_origin.go中调用ys_origin.c中的函数,那么,我可以这么做:

/*

include "ys_origin.h"

*/

import "C"

func FuncOne(a int, b string) error {

// ......

C.LevelUp()

// ......

}

下面讲解具体用法。

四、具体介绍

C语言的数据结构有数字类型(整数和浮点数)、函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值