Go语言内嵌C语言教程

Go语言内嵌C语言数据类型转换

前言:go内嵌c语言,文件开通首先需要引入C的头文件,和指定的对应库,具体格式如下:
/*
#cgo CFLAGS : -I./include
#cgo LDFLAGS: -L./ -lXXX
#include <stdio.h>
#include <stdlib.h>
int num = 0;
char buf[100] = {0};
*/
import “C”

重点:此处import "C"必须与注释部分挨着,中间不允许空行。

1.数据类型转换 test.go:
go文件中c变量使用:
int:
定义c变量:int num;
则go的变量 a := int(C.num)

char:
c: char buf[100] = {0};
go: go_buf := C.GoString(&C.buf[0])

结构体:
c: typedef struct test{
int a;
char buf[100];
}TEST_S;

go:go文件中如果引用C的头文件已包含对应的结构体,那么再go中不需要再次声明,直接使用该结构体类型:
方法一:stTest := C.TEST_S{} //推荐方式一,方式二有点反人类。
方法二:stTest := C.struct_test{}

指针:
go中指针和变量类型和C中基本一致,此处姑且认为大家都是有编码基础的,如有需求欢迎讨论。

API封装形参:
提供给go的c接口对外变量类型必须是标准c库的,不能使用内部定义的,否则go编译连接库时会报错。
go变量转换c类型:
一般用在调用c接口时用:
C.CString()
C.int()

如果想要打印C的结构体,可以通过fmt使用%v输出,但是字符串依然是反人类的,建议将字符串变量转换为go的类型后输出打印。

关于切片等也是可以实现的,时间不早了,后续有时间接着写。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘帝阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值