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函数 */

然后编译为静态库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 PHP 中调用 Go 的协程有几种方式: 1. 使用 Go 语言的网络库,在 PHP 中通过 HTTP 请求调用 Go 写的服务端程序。这种方式可以将 Go 的协程作为独立的服务提供给 PHP 调用,两者之间可以通过 HTTP 协议进行通信。 2. 使用 Go 语言的 cgo 库,在 PHP 中通过扩展的方式调用 Go 的协程。cgo 是 Go 语言提供的一个库,可以让 Go 程序在 C 语言的环境中运行,因此也可以在 PHP 中使用 cgo 库调用 Go 的协程。 3. 使用 Go 语言的 gRPC 库,在 PHP 中通过 gRPC 协议调用 Go 的协程。gRPC 是一种远程过程调用协议,支持多种语言,可以方便地在 PHP 和 Go 之间进行通信。 以上三种方式均需要在 Go 中编写相应的代码,才能在 PHP 中使用。建议先了解相关的技术原理,再根据实际需要选择合适的方式进行实现。 ### 回答2: 要在PHP中调用Go的协程,首先需要通过CGO工具将Go代码编译为共享库,然后在PHP中使用FFI(Foreign Function Interface)来加载和调用这个共享库。 以下是具体的步骤: 1. 创建一个Go模块,并将协程相关的代码写入其中。将这个模块编译为共享库,可以使用以下命令: ```go go build -buildmode=c-shared -o libcoroutine.so coroutine.go ``` 2. 在PHP中通过FFI加载这个共享库,并声明需要调用的函数。可以使用以下代码: ```php $ffi = FFI::cdef(" void goCoroutine(); ", "./libcoroutine.so"); $ffi->goCoroutine(); ``` 3. 在Go的协程函数中,使用`runtime.LockOSThread`将当前协程绑定到一个操作系统线程,以便在调用协程时不会出现竞态条件。使用`runtime.UnlockOSThread`在协程完成后解除绑定。 ```go package main import ( "runtime" "fmt" ) // 导出给CGO调用的函数 //export goCoroutine func goCoroutine() { runtime.LockOSThread() defer runtime.UnlockOSThread() go func() { // 协程逻辑 fmt.Println("Hello from Go coroutine!") }() // 等待协程执行完成 select {} } func main() { // 阻止Go程序直接退出 select {} } ``` 通过以上步骤,你就可以在PHP中调用Go的协程了。需要注意的是,在PHP中调用Go的协程时,需要将Go的协程逻辑封装在一个函数中,并在该函数中调用`runtime.LockOSThread`和`runtime.UnlockOSThread`来绑定和解绑操作系统线程。同时,需要通过FFI加载共享库并声明需要调用的函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值