Go黑魔法之导出函数供C调用

go build 包含一个选项-buildmode可通过配置c-archive & c-shared两种模式分别生成可供C调用的静态 & 动态库.
具体详情可通过go help buildmode查看帮助.

示例

go 代码

这是FastCGI unix socket 简单示例, 响应FastCGI请求回应”Hello World!”.
注意:
import “C” 与 “//export FCGI_run ” 为必须配置,启用export用于导出Library函数名称;

package main
import ("C""fmt""net""net/http""net/http/fcgi"
)func handler(res http.ResponseWriter, req *http.Request) {fmt.Fprint(res, "Hello World!")
}//export FCGI_run
func FCGI_run() {l, err := net.Listen("unix", "/var/run/go-fcgi.sock")if err != nil {return}http.HandleFunc("/", handler)fcgi.Serve(l, nil)
}func main () {}

编译动态库

go build -a -v -buildmode=c-shared  -o libfcgi_api.so  fcgi_api.go

分别生成 fcgi_api.h & libfcgi_api.so.

C 代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdint.h>#include "fcgi_api.h"
int main(int argc, char **argv)
{FCGI_run();return 0;
}

编译

gcc fcgi_api_test.c  -o fcgi_api_test -L./ -lfcgi_api -Wl,-rpath="\$ORIGIN/"

测试

nginx 配置

转发FastCGI请求

...
server {listen       80;server_name  example.com;location / {fastcgi_pass  unix:/var/run/go-fcgi.sock;include       fastcgi_params;}
}
...

启动NGINX

nginx -c goapp.conf 

FastCGI

./fcgi_api_test &

cURL 测试

curl -q -v  http://example.com/
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to example.com (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.12.1
< Content-Type: text/html; charset=utf-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Date: Fri, 17 Aug 2018 04:05:19 GMT
<
* Connection #0 to host example.com left intact
Hello World!

Go黑魔法之导出API供C调用相关推荐

  1. java跨域权重_爱站权重查询 API 接口请求调用

    原标题:爱站权重查询 API 接口请求调用 爱站权重查询 API 接口在网上已经很多且大都封装成了 API 供别人调用.支持前台跨域请求,以GET/POST方式提交即可.爱站权重查询 API 接口可以 ...

  2. 请求接口返回的是一个html_搜狗美图 API 接口请求调用

    搜狗美图 API 接口在网上已经很多且大都封装成了 API 供别人调用.支持前台跨域请求,以POST方式提交图片即可.搜狗美图 API 接口每日都会更新一张美图,本 API 接口可选择生成当日美图,也 ...

  3. delphi 调用php接口_爱站权重查询 API 接口请求调用

    爱站权重查询 API 接口在网上已经很多且大都封装成了 API 供别人调用.支持前台跨域请求,以GET/POST方式提交即可.爱站权重查询 API 接口可以查询百度权重.搜狗等级.360权重.神马权重 ...

  4. php抓取搜狗图片,搜狗美图 API 接口请求调用

    原标题:搜狗美图 API 接口请求调用 搜狗美图 API 接口在网上已经很多且大都封装成了 API 供别人调用.支持前台跨域请求,以POST方式提交图片即可.搜狗美图 API 接口每日都会更新一张美图 ...

  5. php 抓取360搜索数据,360搜索收录 API 接口请求调用

    原标题:360搜索收录 API 接口请求调用 360收录 API 接口在网上已经很多且大都封装成了 API 供别人调用.支持前台跨域请求,以GET/POST方式提交即可.360收录 API 接口可以查 ...

  6. Android Studio如何导出可供Unity使用的aar插件详解

    前言 项目之前使用Eclipse导出的jar文件来做与Android交互,最近因为工作需要需使用Android Studio的aar文件,网上参考了部分文章,也结合自己的理解重新整理一下具体的方法,通 ...

  7. python调用第三方接口获取数据_python 接口实现 供第三方调用的例子

    python 接口实现 供第三方调用的例子 实验环境 1.环境问题 python 2.7 以上自带的pyunit bottle 作为一个python的简易服务器 在python安装目录 打开命令窗口( ...

  8. 百度短语音识别api(JavaScript调用)

    百度短语音识别api(JavaScript调用) 前言 页面效果预览 配置代理 获取百度鉴权机制token请求 百度短语音识别请求 获取百度Access Token 调用短语音识别接口 使用本地文件测 ...

  9. OWIN 自宿主模式WebApi项目,WebApi层作为单独类库供OWIN调用

    OWIN 自宿主模式WebApi项目,WebApi层作为单独类库供OWIN调用 原文: OWIN 自宿主模式WebApi项目,WebApi层作为单独类库供OWIN调用 OWIN是Open Web Se ...

  10. 关于win7下编译pyx文件生成pyd文件供Python调用

    在运行python程序的时候,会发现有些模块不是用Python语言编写的,而是用C/C++编写的,主要是考虑到C/C++编写的模块相对Python脚本语言编写的模块执行速度更快.那么在调用这些由C/C ...

最新文章

  1. 有人买不?没人的话我待会儿再来问问 价值6.11亿美元的入侵工具无人问津
  2. php 自动处理小图的代码,PHP 处理图片的类实现代码
  3. ubuntu14.04 boost动态库找不到 libboost_system.so.1.58.0
  4. 动手学深度学习(PyTorch实现)(八)--AlexNet模型
  5. Java对接萤石云平台海康摄像头视频监控
  6. hp 官方没有针对 mac 的显示器驱动
  7. 基于JMP的独立样本t检验、配对t检验、单样本t检验
  8. shader里的uv是什么
  9. 定企业生死的中台,到底长啥样?
  10. 分享:用Python语言轻松实现二代身份证阅读器(读卡器)自动读卡,支持定制开发
  11. js高级jQuery框架easyUI框架
  12. 【毕业设计】2-基于单片机控制的直流电机调速系统设计(原理图+仿真+答辩论文+答辩PPT)
  13. windows10怎么安装c语言,如何在Win10安装Microsoft Visual C ++ 2015运行时
  14. hilbert谱 matlab,MATLAB实现EMD分解及希尔伯特谱分析
  15. 用bashdb调试RV1126的uboot make 脚本
  16. 使用NSIS制作驱动安装包
  17. Java 基本 语法变量与运算符
  18. qiankun前端微服务框架
  19. 南京理工大学计算机复试题库,南京理工大学考研复试计算机数据库试题
  20. wordpress-时光轴风格niconiconi极简清爽主题模板

热门文章

  1. android各版本对应的SDK level(包括android 10)
  2. vant组件二次封装-下拉刷新列表组件
  3. java怎么把程序写入持久化_如何将DataFrame持久化到Hive表?
  4. linux 自动ping脚本,ping自动报警shell脚本forlinux
  5. python3 zip命令_在打包为zip文件的应用程序上从命令行运行pdb?
  6. 体育馆预约系统java_基于SSM框架下的JAVA体育场地预约系统
  7. jq控制div是否展示_jQuery判断一个元素是否可见的方法
  8. 计算机应用基础253页答案,计算机应用基础作业一(答案)
  9. StanfordDB class自学笔记 (8) Querying XML
  10. rabbitmq 一个生产者多个消费者_RabbitMQ入门学习系列(二),单生产者消费者