跳到主要内容

CGO

以下是一些常见的cgo支持的函数和类型以及查询的方法:

常见支持的类型:

  • 数值类型
    • C.char:对应Go语言中的byte类型 。
    • C.schar:对应Go语言中的int8类型 。
    • C.uchar:对应Go语言中的uint8类型 。
    • C.short:对应Go语言中的int16类型 。
    • C.ushort:对应Go语言中的uint16类型 。
    • C.int:对应Go语言中的int32类型 。
    • C.uint:对应Go语言中的uint32类型 。
    • C.long:对应Go语言中的int32类型 。
    • C.ulong:对应Go语言中的uint32类型 。
    • C.longlong:对应Go语言中的int64类型 。
    • C.ulonglong:对应Go语言中的uint64类型 。
    • C.float:对应Go语言中的float32类型 。
    • C.double:对应Go语言中的float64类型 。
    • C.size_t:可当作Go语言中的uint无符号整数类型对待 。
  • 字符串和切片类型
    • *C.char:C语言中的字符串类型,以null字符结尾,可与Go语言的string类型通过C.CStringC.GoString等函数进行转换.
    • []byteunsafe.Pointer[]byte切片可通过C.CBytes函数转换为unsafe.Pointer类型的C语言字节数组,反之可通过C.GoBytes函数将C语言字节数组转换为[]byte切片.
  • 结构体、联合、枚举类型:可以在Go代码中定义和使用C结构体,通过import "C"导入后,可直接使用C结构体类型来声明变量和操作结构体成员.

常见支持的函数:

  • 类型转换函数
    • C.CString(string):将Go语言的string转换为C语言的*C.char类型,返回的字符串由C语言的malloc函数分配内存,使用后需调用C.free释放。
    • C.CBytes([]byte):将Go语言的[]byte切片转换为C语言的字节数组,同样由malloc分配内存,需手动释放。
    • C.GoString(*C.char):将C语言的以null结尾的字符串转换为Go语言的string类型。
    • C.GoStringN(*C.char, C.int):将C语言的具有明确长度的字符数组转换为Go语言的string类型。
    • C.GoBytes(unsafe.Pointer, C.int):将C语言的具有明确长度的字节数组转换为Go语言的[]byte切片。
  • 标准库函数:可以直接调用C标准库中的函数,如stdio.h中的putsprintfstdlib.h中的mallocfreestring.h中的strlen等.

查询方法:

  • 官方文档:Go语言的官方文档是最权威的查询资料。可以查看 cgo commandruntime/cgo 的文档,其中包含了对cgo工具以及相关函数、类型等的详细介绍.
  • Go语言的代码示例:在Go语言的官方仓库以及一些知名的开源项目中,可以找到大量使用cgo的示例代码,通过学习这些示例,了解不同场景下cgo支持的函数和类型的使用方法。例如,Go语言标准库中的一些使用了cgo的包,如net包中与网络相关的底层实现可能会涉及到cgo与系统C库函数的交互等 。
  • 在线教程和博客:许多技术博客和在线教程也会对cgo的使用进行详细讲解,并列举一些常见的函数和类型的使用示例,如 CSDN博客 上的相关文章.