C G O CGO CGO简介
C G O CGO CGO是一个go和c互动工具,集成在go语言包中, C G O CGO CGO编程需要注意内存泄露问题,因为go语言的栈是动态变化的,c是静态的,在相互调用时会切换空间,必须弄清楚变量的是谁来负责内存分配与回收。
# 目录总览
./
|-- hello.c
|-- hello.h
`-- main.go
# hello.c和hello.h是被go调用的c语言文件
# main.go是调用者
hello.h
#ifndef _IOTDB_H
#define _IOTDB_H
#include<stdio.h>
int ToSay(char* words);
#endif
hello.c
#include "hello.h"
int ToSay(char* words)
{
printf("%s\n",words);
}
gcc -c hello.c # 如果c程序没有问题,那么会生成hello.o
main.go
package main
// #cgo LDFLAGS: hello.o
// #include "hello.h"
// #include <stdlib.h>
import "C"
import(
"unsafe"
)
func main(){
Cstr := C.CString("hello world!")
C.ToSay(Cstr)
C.free(unsafe.Pointer(Cstr))
}
运行
go build -o hello main.go # 编译
./hello # 运行
hello world # 如果成功,就这样