您现在的位置是:网站首页> Go语言

Golang中嵌入C代码

摘要

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))

 }

做有封装性质的项目图

1.png

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函数

Top