CGO编程

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_int
char     main._Ctype_char
char[30] [30]main._Ctype_char
float    main._Ctype_float
double   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"))
}

三、相关资料
1)https://www.kancloud.cn/wizardforcel/gopl-zh/106479
2)https://studygolang.com/articles/8106
3)https://studygolang.com/articles/3190

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,896评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,260评论 18 399
  • 最近在做年度预算,策略、规划、传播、活动、费用… …多个角度,不胜枚举。 如何使自己的预算和规划更加的“科学”、符...
    执笔乱涂鸭阅读 951评论 1 1
  • 2016年过半了,你下半年有什么目标呢?或者你上半年的目标完成得怎样呢?我们总是在感叹时间飞逝,但是回头看看过去的...
    纯真的漫游人生阅读 619评论 0 7
  • 1.创建一个10G分区,并格式为ext4文件系统 (1)要求其block大小为2048,预留空间百分比为2,卷标为...
    小翔脸阅读 676评论 0 0

友情链接更多精彩内容