C语言调用GO

最近工作中遇到需要在c语言里面调用go语言的需求,总结了一下,下面代码里面的每一个注释都很有用,闲话不多说,直接上代码~

示例

GO代码:

package main // 这个文件一定要在main包下面

import "C" // 这个 import 也是必须的,有了这个才能生成 .h 文件

// 下面这一行不是注释,是导出为SO库的标准写法,注意 export前面不能有空格!!!

//export hello

func hello(value string)*C.char { // 如果函数有返回值,则要将返回值转换为C语言对应的类型

return C.CString("hello" + value)

}

func main(){

// 此处一定要有main函数,有main函数才能让cgo编译器去把包编译成C的库

}

注:如果go函数有多个返回值,会生成一个struct,在写c代码时要用相应的struct接收,参照生成的.h文件

生成so库

go build -buildmode=c-shared -o hello.so hello.go

C代码:

#include

#include

#include "hello.h" // 此处为上一步生成的.h文件

int main(){

char c1[] = "did";

GoString s1 = {c1,strlen(c1)};// 构建go类型

char *c = hello(s1);

printf("r:%s",c);

return 0;

}

编译C代码

gcc -o c_go test.c hello.so

注:这里要把之前生成的so文件已写在后面

最后执行:

./c_go

c语言中调试时go的作用,C语言调用GO相关推荐

  1. c语言中数组的概念及作用,C语言数组的定义及其使用方法

    什么是数组? 在我们学习数组前先让我们介绍一下c语言中数组是什么?数组就是一个个元素按照一定顺序排列的集合.它将数据从最低的内存地址保存到最高的内存地址. 声明一个数组 c语言规定了声明数组的格式: ...

  2. c语言中读和写的作用,c语言文件读写

    c语言文件读写 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种. ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码.ASCII码 ...

  3. c语言中左移右移有什么作用,C语言中左移和右移运算符详细介绍

    搜索热词 C语言中左移和右移运算符详细介绍 左移运算符(< 左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0填补,高位左移溢出 ...

  4. c语言中读和写的作用,C语言中对文件最基本的读取和写入函数

    C语言read()函数:读文件函数(由已打开的文件读取数据) 头文件: #include 定义函数: ssize_t read(intfd,void* buf,size_tcount); 函数说明:r ...

  5. c语言中逻辑非运算符的作用,C语言中逻辑运算符非!与或||的优先级怎么说?...

    逻辑非的优先级最高,逻辑与次之,逻辑或最低,即:!(非)→&&(与)→||(或)记忆口诀:not(非)and(与)or(或)运算规则1)&&:当且仅当两个运算量的值都为 ...

  6. c语言中结构体变量的作用,C语言 结构体 类型变量的 定义 和 引用

    前面学习了变量和数组这些简单的数据结构,它们的特点是必须使用规定的数据类型.例如数组被定义为整型后,它的所有存储单元都是由整型构成.现实生活中某一类事物的共同属性可能是由不同的数据类型组成的集合,或者 ...

  7. C语言中内联函数的作用 inline

    C语言中内联函数的作用 inline C语言中内联函数到底有什么作用? 试想一下,每当我们在假设就在主函数中调用另外一个函数的时候,那么这个函数就要入栈或者出栈,比如说下面的一个例子: 点击(此处)折 ...

  8. c语言中的自己写的.h文件如何调用注意事项

    c语言中的自己写的.h文件如何调用注意事项 需要建立一个项目project,并把相关的.h .c .cpp文件建在这个项目下面. 需要注意引用时不同,例如 #include<stdio.h> ...

  9. c语言中存贮班级学生的变量,C语言----变量教案.docx

    C语言----变量教案 课 题 2.2 常量和变量----变量 课型 理实一体化 授课班级 高二计算机(升学班) 课时 2 教学目标 复习巩固C语言中常量的应用: 掌握C语言中变量的命名规则及应用. ...

最新文章

  1. Handler消息传递机制
  2. 回归Dos操作的快感,进入PowerShell世界
  3. 适合写python的电脑_这篇写给想选计算机专业的学弟学妹们
  4. 计算机里面照片无法打卡,为什么电脑照片打不开_电脑照片打不开的解决方法...
  5. Winsock 入门 判读主机字节序 示例
  6. 荣耀 6 安装 SD 卡,提示:SD卡已安全移除
  7. STM32 基础系列教程 44 - FSMC_LCD
  8. linux下log日志乱码_如何用 Linux 技巧大大提高工作效率?
  9. 朱江洪功成身退 朱董配解体谁主格力(图)
  10. 大龄打工者的出路在哪里
  11. C语言创建顺序表并插入元素 详细注释
  12. 2. 块和布局,小部件
  13. 编程语言常见符号合集,赶快收藏。
  14. C#之Dispose
  15. 天邑TY1608_S905L3B_支持RTL8822CS、MT7668_线刷/卡刷_刷机固件包
  16. 《Python渗透测试编程技术:方法与实践》:信息的利用(进阶)
  17. 参考文献格式字号字体_论文字体字号格式要求是什么?
  18. 微信小程序 云开发 欢迎登录注册
  19. 网页中实现图片的毛玻璃效果
  20. 腾讯云学生服务器如何购买

热门文章

  1. drive es 软件兼容_某知名软件被完美修改!对不住了!
  2. mysql 5.7.21-linux_MySQL 5.7.21 Linux平台安装 Part 2
  3. 将chart放入panel中出现滚动条_聊天场景在web前端开发中的体验与优化
  4. python控制语句实验报告,python流程控制语句案例练习
  5. linux新的API signalfd、timerfd、eventfd使用说明——eventfd
  6. Microsoft Windows CE .NET 中的中断体系结构
  7. 210板wince键盘驱动分析和移植
  8. idea 执行 java jar_idea打包java可执行jar包的实现步骤
  9. python json数据格式数组内元素递增赋值_利用Python实现JSON格式数据的编码与解码操作...
  10. oracle报错00838,oracle11g的内存分配不当,导致的错误ORA-01034,ORA-00838,ORA-27101