CGO 提供了 golang 和 C 语言相互调用的机制。某些第三方库可能只有 C/C++ 的实现,完全用纯 golang 的实现可能工程浩大,这时候 CGO 就派上用场了。 (推荐学习:go)

可以通 CGO 在 golang 在调用 C 的接口,C++ 的接口可以用 C 包装一下提供给 golang 调用。

被调用的 C 代码可以直接以源代码形式提供或者打包静态库或动态库在编译时链接。推荐使用静态库的方式,这样方便代码隔离,编译的二进制也没有动态库依赖方便发布也符合 golang 的哲学。

CGO 的具体使用教程本文就不涉及了,这里主要介绍下一些细节避免使用 CGO 的时候踩坑。

参数传递

基本数值类型

golang 的基本数值类型内存模型和 C 语言一样,就是连续的几个字节(1 / 2 / 4 / 8 字节)。

因此传递数值类型时可以直接将 golang 的基本数值类型转换成对应的 CGO 类型然后传递给 C 函数调用,反之亦然:

package main/*#include <stdint.h>static int32_t add(int32_t a, int32_t b) {    return a + b;}*/import "C"import "fmt"func main() {    var a, b int32 = 1, 2    var c int32 = int32(C.add(C.int32_t(a), C.int32_t(b)))    fmt.Println(c) // 3}

更多相关文章

  1. golang如何判断数据类型
  2. golang数据类型有哪些
  3. golang 如何类型转换
  4. go语言数据类型转换教程
  5. golang怎么把字符串转成Int类型
  6. golang判断错误类型的方法
  7. 详解 Go 中的不可变类型
  8. 总结 Go 的数据类型
  9. 详解Golang中函数作为值与类型

随机推荐

  1. golang判断错误类型的方法
  2. golang使用什么数据库?
  3. golang怎么自定义错误
  4. golang 如何部署到服务器?
  5. golang解决中文乱码的方法
  6. go语言中的排序讲解
  7. golang怎么给slice赋长度
  8. Go语言异常处理的方法介绍
  9. golang怎么拼接字符串数组
  10. golang使用protobuf的方法详解