读书人

在Go包里增添C代码并且不使用CGO(不需

发布时间: 2013-10-14 12:54:46 作者: rapoo

在Go包里添加C代码并且不使用CGO(不需要gcc)

如果go代码里使用了cgo,那么编译的时候电脑上必须按照gcc才能正确编译

这篇文章展示了如何用c写一个包让go调用并且不需要使用cgo


A 需要注意的:

1. C代码天生的不安全

2. Go1的兼容性保证不包括C代码

3. C函数不能inline

4. 逃逸分析不能跟踪传递到C函数里的value (逃逸分析:http://kenwublog.com/jvm-optimization-escape-analysis)

5. C编译器(5c,6c,8c)没有对应的Go编译器优化做的好,因此生成的代码也许没有Go代码优化的那么好

6. C代码是plan9风格的,与C89较相似


B 返回的方式

第一个例子是一个简单的返回true的函数:True

// Max returns the maximum of two integers.func Max(a, b int) int

E. 传递地址

前面两个例子,我们传递两个参数给函数并且把拷贝通过堆栈返回。Go的函数调用是值传递,调用C函数也是如此

最后一个例子我们将传递某个变量的指针给C函数,并通过指针改变这个值

1.双击env.cmd,以下命令都是在弹出的窗口里输入的2.测试:go test -v ccode输出:=== RUN TestTrue--- PASS: TestTrue (0.00 seconds)=== RUN TestMax--- PASS: TestMax (0.00 seconds)=== RUN TestInc--- PASS: TestInc (0.00 seconds)PASSok      ccode   0.255s3.安装ccode库:go install ccode4.编译:go build main5.运行:main.exe







读书人网 >编程

热点推荐