编程基础知识之语言交互性
2015-11-30 13:59
253 查看
由于Go语言与C语言之间的天生联系,Go语言的设计者们自然不会忽略如何重用现有C模块的这个问题,这个功能直接被命名为Cgo。Cgo既是语言特性,同时也是一个工具的名称。
在Go代码中,可以按Cgo的特定语法混合编写C语言代码,然后Cgo工具可以将这些混合的C代码提取并生成对于C功能的调用包装代码。开发者基本上可以完全忽略这个Go语言和C语言的边界是如何跨越的。
与Java中的JNI不同,Cgo的用法非常简单,比如代码清单1-3就可以实现在Go中调用C语言标准库的puts函数。
代码清单1-3 cprint.go
package main /*
#include <stdio.h> */
import "C"
import "unsafe" func main() {
cstr := C.CString("Hello, world")
import "unsafe" func main() {
cstr := C.CString("Hello, world")
C.puts(cstr)
C.free(unsafe.Pointer(cstr)) }
在Go代码中,可以按Cgo的特定语法混合编写C语言代码,然后Cgo工具可以将这些混合的C代码提取并生成对于C功能的调用包装代码。开发者基本上可以完全忽略这个Go语言和C语言的边界是如何跨越的。
与Java中的JNI不同,Cgo的用法非常简单,比如代码清单1-3就可以实现在Go中调用C语言标准库的puts函数。
代码清单1-3 cprint.go
package main /*
#include <stdio.h> */
import "C"
import "unsafe" func main() {
cstr := C.CString("Hello, world")
import "unsafe" func main() {
cstr := C.CString("Hello, world")
C.puts(cstr)
C.free(unsafe.Pointer(cstr)) }
相关文章推荐
- Python机器学习库scikit-learn实践
- 运算符优先级-PHP运算符优先级
- 纯代码搭建首页,不实用storyboard作为window的根视图控制器
- ldap验证用户(java)<不能以simple协议来获取连接进行连接>
- 垃圾回收机制GC知识再总结兼谈如何用好GC
- Java 内部类中使用局部变量必须是final
- C-(001-006).C语言基础总结
- 运算符优先级-Python 运算符优先级
- VSFTPD全攻略(/etc/vsftpd/vsftpd.conf文件详解)
- CLR 无法从COM 上下文0x1a0e50 转换为COM 上下文0x1a0fc0,这种状态已持续60 秒
- 运算符优先级-Java 运算符优先级
- ASP.NET MVC 5 访问在views文件夹中的JS文件。 ASP.NET MVC html与JS分离
- C#随机数生成器(支持数字跳变)
- spring开发中commons-logging.jar包的功能
- 运算符优先级-C++运算符优先级
- Eclipse SVN 插件使用
- vb.net 写入文件同步锁
- spring DATA (jpa) @query 和JdbcTemplate
- 运算符优先级-C语言运算符优先级
- 使用Python学习RabbitMQ消息队列