在嵌入式开发中总少不了和C/C++打交道,而在开发中也总有某些需求要用到某些其他工具的特性,比如go语言。
Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
Go语言的语法接近C语言,但是对于变量的声明是不同的,其他语法不同之处是For循环和if判断语句不需要用小括号括起来。Go语言支持垃圾回收功能。
与C++相比,Go语言并不包括如异常处理、继承、泛型、断言、虚函数等功能,但增加了slice型、并发、管道、垃圾回收、接口(interface)等特性的语言级支持。
当前有两个Go语言的编译器的分支。官方编译器gc和gccgo。官方编译器支持跨平台编译(但
不支持CGO
)
go还可以嵌入
C代码,但是不可以嵌入C++代码,当然也可以通过某些方式调用C++ API(如SWIG),本文主要讲CGO。怎么嵌入C或者调用动态库就简单略过了,主要注意下:
- 可以用注释符
//
和/**/
包围C代码 - import “C” 和包含C代码之间是没有空行的
- 动态库的导入和编译选项通过LDFLAGS、CFLAGS/CXXFLAGS来设置
- 还可以用pkg-config
#cgo pkg-config : xxxxname
- 编译宏定义指定
#cgo CFLAGS: -DNDEBUG -DXXXX=2
今天先看看go和c之间的类型转换:
char --> C.char --> byte
signed char --> C.schar --> int8
unsigned char --> C.uchar --> uint8
short int --> C.short --> int16
short unsigned