我正在尝试从 C++ 调用 Go。我的代码在地图上运行,我似乎无法使地图与 cgo 一起使用。main.go:package mainimport ( "C" "fmt")func main() {}//export PrintMapfunc PrintMap(m map[string]string) { fmt.Println(m)}其中“编译”为main.h:typedef void *GoMap;extern void PrintMap(GoMap p0);如何在我的 c++ 代码中成功创建 GoMap 并将其传递给 go 代码?
1 回答

哈士奇WWW
TA贡献1799条经验 获得超6个赞
你不能。事实上,由于指针传递规则允许 cgo 安全地与 Go 的并发和垃圾收集器一起工作,你不能用 cgo 对这种类型做任何事情。映射在“总是包含 Go 指针”的类型列表中,因此映射不能作为参数传递给 C 函数,不能从 C 代码调用的 Go 函数返回,也不能由 C 存储。
如果没有看到更多你想要完成的事情,很难给出你应该做什么的建议,但通常的解决方法是让 Go 代码将对象保存在映射中,然后将 C 代码传递给其中的一个键map(例如,可以自由传递或存储的 C 字符串或 int)作为包含在其中的对象的句柄。C 然后通过 Go 函数与对象进行所有交互,Go 函数可以使用键在映射中找到正确的值。切片也可以。
- 1 回答
- 0 关注
- 197 浏览
添加回答
举报
0/150
提交
取消