c调用go完成http请求

最近在把流媒体服务器做静态链接,但是流媒体服务器里面用到了curl做http请求,然后curl又引用了zlib,ssl库,MMP,做静态链接神烦。

于是想到了用go做一个静态库,然后调用。

go编译静态库

先搞一个实现的文件,代码如下

package main        /* 包名必须是main */


import "C"


import (
        "io/ioutil"
        "net/http"
)


import (
        "strings"
)


//export httpGet
func httpGet(url string)int{
        resp, err := http.Get(string(url))
        if err != nil {
                // handle error
        }


        defer resp.Body.Close()
        body, err := ioutil.ReadAll(resp.Body)
        if err != nil {
                // handle error
                return 0
        }


        if strings.Contains(string(body), "1") == true {//这个地方是我个人需要的逻辑
                return 1
        }else {
                return 0
        }
}


func main() {}        /* 必须定义一个空的main函数 */

然后编译为静态库

go build -v -x -buildmode=c-archive -o libgo_http.a

此时会自动生成静态库libgo_http.a 以及对应的 libgo_http.h。

然后,我们再写一个测试文件

#include <stdio.h>
#include "libhello.h"
//#include <string>
#include <string.h>
void main()
{
        GoString pth;
        pth.p = "http://192.168.1.124:8080/test.php";
        pth.n = strlen(pth.p);
        GoInt test = httpGet(pth);
        printf("%d,  \n", test);
}

用gcc编译一下

gcc -o test -I. test.c -L. -lhello -L/usr/lib/x86_64-linux-gnu/ -lpthread -static

运行,没毛病




阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gzssyxwdy/article/details/79963809
个人分类: go
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭