CGO编程

简介: 1)什么是CGO编程?2)CGO语法3)相关资料一、什么是CGO编程?简单说就是GO语言代码中可以编写C代码和调用C代码,在一些偏底层业务中,用C来编写会比较简单,然后GO中来调用二、CGO语法1)简单案例2)GO与C语言类型转换3)G...

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

目录
相关文章
|
安全 Go PHP
Golang 语言的编程技巧之变量
Golang 语言的编程技巧之变量
30 0
|
安全 Go
Golang 语言的编程技巧之类型
Golang 语言的编程技巧之类型
56 0
|
2月前
|
安全 编译器 Go
什么是 CGO?什么时候会用到它?
【8月更文挑战第31天】
55 0
|
3月前
|
编译器 Go C语言
通过例子学习在golang中调试程序
【7月更文挑战第4天】Go语言支持使用cgo进行汇编调试,官方文档在golang.org/doc/asm。注意,调试Go运行时可能遇到变量不可用或行号错误,需谨慎使用step命令。
66 1
通过例子学习在golang中调试程序
|
4月前
|
JSON 算法 测试技术
在go语言中调试程序
【6月更文挑战第29天】Go语言内置`testing`包支持单元测试、基准测试和模糊测试。`go test`命令可执行测试,如`-run`选择特定测试,`-bench`运行基准测试,`-fuzz`进行模糊测试。
55 2
在go语言中调试程序
|
5月前
|
Go 开发者
Golang深入浅出之-Go语言项目构建工具:Makefile与go build
【4月更文挑战第27天】本文探讨了Go语言项目的构建方法,包括`go build`基本命令行工具和更灵活的`Makefile`自动化脚本。`go build`适合简单项目,能直接编译Go源码,但依赖管理可能混乱。通过设置`GOOS`和`GOARCH`可进行跨平台编译。`Makefile`适用于复杂构建流程,能定义多步骤任务,但编写较复杂。在选择构建方式时,应根据项目需求权衡,从`go build`起步,逐渐过渡到Makefile以实现更高效自动化。
86 2
|
Linux Go vr&ar
Golang cgo:如何在Go代码中调用C语言代码?
Golang cgo:如何在Go代码中调用C语言代码?
833 0
Golang cgo:如何在Go代码中调用C语言代码?
|
Rust C语言 Windows
|
Dragonfly Unix Java
Go语言交叉编译,跨平台执行
Go语言编写的程序交叉编译后就可以在各操作系统执行,非Java或Python依赖虚拟机,Go编译后不依赖虚拟机。
235 0
|
Java Linux Serverless
go 语言高级特性--CGO的使用
cgo 是 go 语言里面的一个特性,属于 go 的高级用法,我们可以使用 cgo 来实现 go 语言调用 c 语言程序。
722 0
go 语言高级特性--CGO的使用