什么是cgo
cgo指的是在golang里面,可以直接调用c语言的函数,这样可以比较方便集成一些c模块功能。
1.c语言的数据类型和go语言数据类型比较
| Go 类型 | C 类型对应 | 转换方式 |
|---|---|---|
int | C.int | C.int(goInt) |
string | *C.char | C.CString(goStr) |
[]byte | *C.char + 长度 | C.CBytes(goBytes) |
float64 | C.double | C.double(goFloat) |
| 指针 | *C.type | (*C.type)(unsafe.Pointer(goPtr)) |
cgo的避坑点
1.go语言的指针不要带入c函数里面,垃圾回收时候,不导致崩溃。
2.c语言malloc的指针,需要手动的在golang里面用free释放。
3.对应线程不安全的变量,不如全局变量,需要用sync.mutx去加锁。
4.cgo的调用有上下文的开销,最好不要频繁使用,批量处理比较好。