Go黑魔法之导出API供C调用
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调用相关推荐
- java跨域权重_爱站权重查询 API 接口请求调用
原标题:爱站权重查询 API 接口请求调用 爱站权重查询 API 接口在网上已经很多且大都封装成了 API 供别人调用.支持前台跨域请求,以GET/POST方式提交即可.爱站权重查询 API 接口可以 ...
- 请求接口返回的是一个html_搜狗美图 API 接口请求调用
搜狗美图 API 接口在网上已经很多且大都封装成了 API 供别人调用.支持前台跨域请求,以POST方式提交图片即可.搜狗美图 API 接口每日都会更新一张美图,本 API 接口可选择生成当日美图,也 ...
- delphi 调用php接口_爱站权重查询 API 接口请求调用
爱站权重查询 API 接口在网上已经很多且大都封装成了 API 供别人调用.支持前台跨域请求,以GET/POST方式提交即可.爱站权重查询 API 接口可以查询百度权重.搜狗等级.360权重.神马权重 ...
- php抓取搜狗图片,搜狗美图 API 接口请求调用
原标题:搜狗美图 API 接口请求调用 搜狗美图 API 接口在网上已经很多且大都封装成了 API 供别人调用.支持前台跨域请求,以POST方式提交图片即可.搜狗美图 API 接口每日都会更新一张美图 ...
- php 抓取360搜索数据,360搜索收录 API 接口请求调用
原标题:360搜索收录 API 接口请求调用 360收录 API 接口在网上已经很多且大都封装成了 API 供别人调用.支持前台跨域请求,以GET/POST方式提交即可.360收录 API 接口可以查 ...
- Android Studio如何导出可供Unity使用的aar插件详解
前言 项目之前使用Eclipse导出的jar文件来做与Android交互,最近因为工作需要需使用Android Studio的aar文件,网上参考了部分文章,也结合自己的理解重新整理一下具体的方法,通 ...
- python调用第三方接口获取数据_python 接口实现 供第三方调用的例子
python 接口实现 供第三方调用的例子 实验环境 1.环境问题 python 2.7 以上自带的pyunit bottle 作为一个python的简易服务器 在python安装目录 打开命令窗口( ...
- 百度短语音识别api(JavaScript调用)
百度短语音识别api(JavaScript调用) 前言 页面效果预览 配置代理 获取百度鉴权机制token请求 百度短语音识别请求 获取百度Access Token 调用短语音识别接口 使用本地文件测 ...
- OWIN 自宿主模式WebApi项目,WebApi层作为单独类库供OWIN调用
OWIN 自宿主模式WebApi项目,WebApi层作为单独类库供OWIN调用 原文: OWIN 自宿主模式WebApi项目,WebApi层作为单独类库供OWIN调用 OWIN是Open Web Se ...
- 关于win7下编译pyx文件生成pyd文件供Python调用
在运行python程序的时候,会发现有些模块不是用Python语言编写的,而是用C/C++编写的,主要是考虑到C/C++编写的模块相对Python脚本语言编写的模块执行速度更快.那么在调用这些由C/C ...
最新文章
- 有人买不?没人的话我待会儿再来问问 价值6.11亿美元的入侵工具无人问津
- php 自动处理小图的代码,PHP 处理图片的类实现代码
- ubuntu14.04 boost动态库找不到 libboost_system.so.1.58.0
- 动手学深度学习(PyTorch实现)(八)--AlexNet模型
- Java对接萤石云平台海康摄像头视频监控
- hp 官方没有针对 mac 的显示器驱动
- 基于JMP的独立样本t检验、配对t检验、单样本t检验
- shader里的uv是什么
- 定企业生死的中台,到底长啥样?
- 分享:用Python语言轻松实现二代身份证阅读器(读卡器)自动读卡,支持定制开发
- js高级jQuery框架easyUI框架
- 【毕业设计】2-基于单片机控制的直流电机调速系统设计(原理图+仿真+答辩论文+答辩PPT)
- windows10怎么安装c语言,如何在Win10安装Microsoft Visual C ++ 2015运行时
- hilbert谱 matlab,MATLAB实现EMD分解及希尔伯特谱分析
- 用bashdb调试RV1126的uboot make 脚本
- 使用NSIS制作驱动安装包
- Java 基本 语法变量与运算符
- qiankun前端微服务框架
- 南京理工大学计算机复试题库,南京理工大学考研复试计算机数据库试题
- wordpress-时光轴风格niconiconi极简清爽主题模板
热门文章
- android各版本对应的SDK level(包括android 10)
- vant组件二次封装-下拉刷新列表组件
- java怎么把程序写入持久化_如何将DataFrame持久化到Hive表?
- linux 自动ping脚本,ping自动报警shell脚本forlinux
- python3 zip命令_在打包为zip文件的应用程序上从命令行运行pdb?
- 体育馆预约系统java_基于SSM框架下的JAVA体育场地预约系统
- jq控制div是否展示_jQuery判断一个元素是否可见的方法
- 计算机应用基础253页答案,计算机应用基础作业一(答案)
- StanfordDB class自学笔记 (8) Querying XML
- rabbitmq 一个生产者多个消费者_RabbitMQ入门学习系列(二),单生产者消费者