为了账号安全,请及时绑定邮箱和手机立即绑定

CGO编程

标签:
Go

1)什么是CGO编程?
2)CGO语法
3)相关资料

一、什么是CGO编程?
简单说就是GO语言代码中可以编写C代码和调用C代码,在一些偏底层业务中,用C来编写会比较简单,然后GO中来调用

二、CGO语法
1)简单案例
2)GO与C语言类型转换
3)GO语言传值到C语言

(1)简单案例

package main/*
#include <stdio.h>
int a = 1;
char s[30] = "12345";
int fun1() {
    printf("hello cgo!\n");
}
 */import "C"import "fmt"func main() {
    fmt.Println(C.a)
    fmt.Println(C.s)
    C.fun1()
}

输出结果:1[49 50 51 52 53 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
hello cgo!

C代码在GO语言中嵌入在/**/内,然后引入C代码,必须在紧接的下一行,不能有空行或其他代码,否则不能引入

/*
C代码
*/import "C"

然后GO中调用C代码的话,以C. + 变量名或函数名

(2)GO与C语言类型转换

GO调用打印C变量类型:

package main/*
#include <stdio.h>
int a = 1;
float f = 1.2;
double d = 1.3;
char c = '1';
char s[30] = "12345";
 */import "C"import "fmt"func main() {
    fmt.Printf("int      %T\n", C.a)
    fmt.Printf("char     %T\n", C.c)
    fmt.Printf("char[30] %T\n", C.s)
    fmt.Printf("float    %T\n", C.f)
    fmt.Printf("double   %T\n", C.d)
}

输出:int      main._Ctype_intchar     main._Ctype_charchar[30] [30]main._Ctype_charfloat    main._Ctype_floatdouble   main._Ctype_double

C -> GO

int,float,double,char类型变量可以直接强转// 转换 C 字符串到 Golang 字符串func C.GoString(*C.char) string// 转换一定长度的 C 字符串到 Golang 字符串func C.GoStringN(*C.char, C.int) string// 对于C字符串数组变量,没有办法直接用C.GoString()和C.GoStringN()直接转换,可以使用chart*替代字符串数组变量的使用

GO -> C

对于int,float,double,char可以直接强转赋值char*使用C.CString()

3)GO语言传值到C语言

package main
/*#include <stdio.h>int a = 1;float f = 1.2;
double d = 1.3;
char c = '1';
char* s = "12345";
int fun1(int a, char c, float f, double d,char *s) {    printf("%d %c %f %f %s\n", a, c, f, d, s);
}
 */
import "C"func main() {
    C.fun1(1, 'a', 1.2, 1.5, C.CString("dsadsad"))
}



作者:laijh
链接:https://www.jianshu.com/p/eb2820becbf1


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消