是否可以编写修改Go代码中定义的类型结构的C函数?

fuz*_*fuz 12 c struct go cgo

这是这个问题的后续行动.我在那里假设可能不是真的,这就是我明确询问它的原因.因为我忘了询问这是否真的可行,所以我已经提交了#8114号问题.


使用cgo,Go代码可以在C类型上运行,如下所示:

package foo

//#include <sys/stat.h>
import "C"

func fileSizeFromStat(stat *C.struct_stat) int64 {
    return int64(stat.st_size)
}
Run Code Online (Sandbox Code Playgroud)

反过来可能吗?即编写在go类型上运行的C函数?上述问题概述了具体内容; 我想编组无法从Go代码访问的C结构,因为它们使用了联合或位域,或者因为它们的对齐使它们与Go代码不兼容.

One*_*One 1

据我所知,不,你不能。

但是你可以使用像https://github.com/OneOfOne/go-nfqueue/blob/master/nfqueue.go#L130这样丑陋的东西,你可以导出一个需要大量指针的 Go 函数并在 go 中构造你的 Go 结构。