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