为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Cgo 中使用 GoMap?

如何在 Cgo 中使用 GoMap?

Go
隔江千里 2022-05-18 13:40:30
我正在尝试从 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 函数可以使用键在映射中找到正确的值。切片也可以。



查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号