您现在的位置是:网站首页> Go语言
Golang中嵌入C代码
- Go语言
- 2021-04-09
- 800人已阅读
package main
//#include <stdio.h>
//#include <stdlib.h>
/*
void Hello(char *str) {
printf("%s\n",str);
}
*/
import "C" //假设把C当成包,其实有点类似C++的名字空间
import "unsafe" //C指针的使用,在C代码中申请的空间,GC垃圾回收机制不会管理,所以需要自己手动free申请的空间
func main() {
s := "Hello Cgo"
cs := C.CString(s)
C.Hello(cs)
C.free(unsafe.Pointer(cs))
}
做有封装性质的项目图
libc.h代码
#include <stdio.h>
extern int add(int a, int b,char *str) {
printf("sum:%d,%s\r\n",a+b,str);
return a+b;
}
main.go代码
package main
/*
#include "libc.h"
#include <stdlib.h>
*/
import "C"
import "fmt"
import "unsafe"
func main() {
a := C.int(1)
b := C.int(2)
s := "hello world"
cs := C.CString(s)
value := C.add(a, b, cs)
fmt.Printf("%v\n", value)
fmt.Printf("%v\n", int(value))
C.free(unsafe.Pointer(cs))
}
C.add
C.free 就是头文件里已有的C函数