为了有一个较为直观的了解我們来看一个简单的例子,创建文件 main.go:
1.编译器和链接器标志
我们可以通过 #cgo 指令来设置编译器和链接器标志例如:
附带提及一点的是,这些指令中可以包含构建约束(build constraint)详细内容见:。
常用的 #cgo 指令有:
结构体上需要注意的点:
1.C 结构体的域名称如果为 Golang 的关键字时访问时需要茬域名称前面加上 _。比如说C 中有一个结构体变量 x,此变量对应的结构体中有一个域 type那么在 Golang 中需要通过 x._type 来访问 type 域
2.结构体的位域、非对齐數据等无法在 Golang 中表示时会被忽略
标准的 C 数值类型对应:
任何的 C 函数(包括 void 函数)都可以返回一个返回值和 C 的 errno 变量(作为错误):
直接调用 C 函数指针目前还无法支持。
有一些特殊的函数可以用于 C 类型和 Golang 类型之间转换(通过数据拷贝的方式)伪定义如下:
2.C 语言中的结构、联合、枚举类型(而非变量),在 Golang 中需要加上 struct_、union_、enum_ 前缀访問由于 Golang 中没有联合这种数据类型,因此 C 的联合在 Golang 中被表示为字节数组
3.和 C 语言等价的那些类型是不可以导出的
有疑问加站长微信联系(非夲文作者)
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。