概述
在使用 cgo 的时候,首先要开启 cgo 的配置
CGO_ENABLED=1
使用 C 代码
然后如下所示,既可以开始简单的使用 C 代码。
package main
/*
#include <stdio.h>
void Cprint(){
printf("hello from c \n");
}
void CprintStr(char* str){
printf("Hello %s \n",str);
}
*/
import "C"
func main() {
C.Cprint()
// 不能直接传字符串,需要相应的转一下
// 有些比较简单的,比如int类型,底层会自动转,也可以不手动转类型
C.CprintStr(C.CString("1232456"))
}
但是在项目中,不大可能所有的 C 代码都写在头部,需要做一下拆分。
- 头部
hello.h
文件, 需要放到 lib 文件夹,此时 go 里需要用 cgo 需要指定头文件位置 - 头文件的实现放到
hello.c
文件里
main.go
代码如下所示:
package main
/*
#cgo CFLAGS: -I./lib
#include "hello.h"
*/
import "C"
func main() {
C.Cprint()
// 不能直接传字符串,需要相应的转一下
C.CprintStr(C.CString("1232456"))
}
hello.h
代码如下所示
#include <stdio.h>
void Cprint();
void CprintStr(char* str);
hello.c
代码如下所示
#include "hello.h"
void Cprint(){
printf("hello from c \n");
}
void CprintStr(char* str){
printf("Hello %s \n",str);
}
代码结构如下:
使用 C++ 代码
和使用 C 嵌入差不多,不过 C++代码不会,如果后续用到的话再学吧。