我必须释放使用 Cgo 创建的结构吗?

Do I have to free structs created with Cgo?

我在 Go 代码中创建 C 结构,如下所示:

var data C.MyStruct_t

我是否必须在某些时候手动释放它们,就像我在使用 CString 时所做的那样?使用 CString 我经常做类似的事情:

ctitle := C.String(title)
defer C.free(unsafe.Pointer(&ctitle))
C.my_func(&ctitle)

没有。你只调用 free 通过 C *alloc 函数分配的东西。 C.CStringC.CBytes 函数在内部记录为这样做,并且需要使用 C.free.

在这种情况下,即使 dataC.MyStruct_t 类型,它也是在 Go 中分配的,因此将由 Go 垃圾收集器处理。