本文详解如何在 Cgo 中为 C 回调函数正确声明和实现接收 const char* 参数的 Go 导出函数解决因类型不匹配导致的编译错误并提供可直接复用的类型别名方案与完整示例。 本文详解如何在 cgo 中为 c 回调函数正确声明和实现接收 const char* 参数的 go 导出函数解决因类型不匹配导致的编译错误并提供可直接复用的类型别名方案与完整示例。在使用 Cgo 调用 C 动态库或第三方 SDK 时回调callback是常见交互模式。当 C 端函数签名明确要求 const char*例如日志回调、事件通知中的只读字符串而 Go 侧尝试用 *C.char 实现导出函数时Cgo 会自动生成非 const 版本的 C 函数声明如 void myFunc(char*, int)与你手动在 // #include 中声明的 void myFunc(const char*, int) 冲突从而触发编译错误error: conflicting types for myFuncnote: previous declaration of myFunc was here根本原因在于Cgo 不支持直接将 const 修饰符映射到 Go 导出函数的参数类型*C.char 在 Cgo 内部始终被视作 char*无法满足 const char* 的类型契约。? 正确解法是在 C 代码中定义一个带 const 的类型别名并在 Go 中通过该别名声明参数。这样既保持 C 端语义清晰又绕过 Cgo 对 const 的忽略限制。? 推荐方案使用 typedef 定义 const 别名修改你的 test.go 如下关键变更已加注 WisPaper 复旦大学研发的AI学术搜索工具5分钟内筛选1000篇论文