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:完整的检测功能。