cgo知识点总结

48 阅读1分钟

什么是cgo

cgo指的是在golang里面,可以直接调用c语言的函数,这样可以比较方便集成一些c模块功能。

1.c语言的数据类型和go语言数据类型比较

Go 类型C 类型对应转换方式
intC.intC.int(goInt)
string*C.charC.CString(goStr)
[]byte*C.char + 长度C.CBytes(goBytes)
float64C.doubleC.double(goFloat)
指针*C.type(*C.type)(unsafe.Pointer(goPtr))

cgo的避坑点

1.go语言的指针不要带入c函数里面,垃圾回收时候,不导致崩溃。

2.c语言malloc的指针,需要手动的在golang里面用free释放。

3.对应线程不安全的变量,不如全局变量,需要用sync.mutx去加锁。

4.cgo的调用有上下文的开销,最好不要频繁使用,批量处理比较好。