panic: runtime error: cgo argument has Go pointer to Go pointer
今天在公司用 golang 写了一个工具程序,用到了代码仓库中的一个读取 k-v 数据库的接口,运行,出现panic:
panic: runtime error: cgo argument has Go pointer to Go pointer
......
这个接口线上模块也在用,应该是没问题的;由于对golang还没有掌握到炉火纯青的地步,一直不明白问题原因,怀疑是环境问题。
询问多人,终于大神回答说,需要添加如下环境变量来支持 cgo:
export GODEBUG=cgocheck=0
一试,果然行了!
记录一下,点滴积累。
2020.11.25 Wed 21:27
2020.12.17 Thu 23:06
补充
《Go 语言高级编程》2.7 节 《CGO内存模型》 对此有解释。
可以通过设置环境变量GODEBUG=cgocheck=0来关闭指针检查行为。
cgocheck默认的值是1,对应一个简化版本的检测;
cgocheck=2:完整的检测功能。