如何实现在GO语言中调用C语言编写的源代码片段?

2026-05-06 05:270阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1902个文字,预计阅读时间需要8分钟。

如何实现在GO语言中调用C语言编写的源代码片段?

《开篇说明:近期在编写客户端程序或与其他部门做功能集成时,多次遇到了跨语言的SDK集成问题。方案繁多,诸如RPC、管道、文件IO、Unix Socket等,但不宜过多。便于研究,以下在Go中进行调用》

开坑说明

最近在编写客户端程序或与其他部门做功能集成时多次碰到了跨语言的sdk集成,虽说方案很多诸如rpc啊,管道啊,文件io啊,unix socket啊之类的不要太多,顺便研究了下在go调用标准c接口的种种方法与坑,内容不少,有空便慢慢更新了。

如何实现在GO语言中调用C语言编写的源代码片段?

内嵌形式

先让我们来看一个最简单的cgo实例

package main //#include <stdio.h> import "C" func main() { C.puts(C.CString("Hello World")) }

输出

Hello World

通过"C包"调用了c中常见的puts函数同时传入通过C.Cstring把go 中string转化为的c string(相当于char *)。其实“C”这个并不是一个包,而是通过import "C"语句启用了go编译器cgo相关的功能让gcc也参与到了编译中。这种方式通过紧贴在import "C"语句上面的注释中编写c代码并在后续代码中使用C对象调用。

阅读全文

本文共计1902个文字,预计阅读时间需要8分钟。

如何实现在GO语言中调用C语言编写的源代码片段?

《开篇说明:近期在编写客户端程序或与其他部门做功能集成时,多次遇到了跨语言的SDK集成问题。方案繁多,诸如RPC、管道、文件IO、Unix Socket等,但不宜过多。便于研究,以下在Go中进行调用》

开坑说明

最近在编写客户端程序或与其他部门做功能集成时多次碰到了跨语言的sdk集成,虽说方案很多诸如rpc啊,管道啊,文件io啊,unix socket啊之类的不要太多,顺便研究了下在go调用标准c接口的种种方法与坑,内容不少,有空便慢慢更新了。

如何实现在GO语言中调用C语言编写的源代码片段?

内嵌形式

先让我们来看一个最简单的cgo实例

package main //#include <stdio.h> import "C" func main() { C.puts(C.CString("Hello World")) }

输出

Hello World

通过"C包"调用了c中常见的puts函数同时传入通过C.Cstring把go 中string转化为的c string(相当于char *)。其实“C”这个并不是一个包,而是通过import "C"语句启用了go编译器cgo相关的功能让gcc也参与到了编译中。这种方式通过紧贴在import "C"语句上面的注释中编写c代码并在后续代码中使用C对象调用。

阅读全文