Go cgo:调用C语言库
学习使用cgo在Go中调用C代码,包括类型转换、内存管理和构建标签。 · 难度:入门 · +15XP
cgo简介
cgo允许Go程序直接调用C函数,访问C库。通过import "C"指令和注释中的C代码实现。
基本用法
// #include
// #include
import "C"
import "unsafe"
func main() {
cstr := C.CString("Hello from C!")
C.puts(cstr)
C.free(unsafe.Pointer(cstr))
}
类型映射
| C类型 | Go类型 |
|---|---|
| int | C.int |
| char* | *C.char |
| void* | unsafe.Pointer |
| size_t | C.size_t |
内存管理
使用C.CString分配的内存必须手动释放,否则造成内存泄漏。推荐使用defer C.free(unsafe.Pointer(cstr))。
练习提示
调用C的sqrt函数(来自math.h)计算平方根。注意链接时可能需要-lm参数。