0%

go-异步请求范例

go-异步请求范例:

github.com/mozillazg/request 是一个 Go 语言的 HTTP 客户端库,它提供了简单易用的 API 来发送 HTTP 请求。然而,这个库本身并不直接支持异步操作。在 Go 中,异步操作通常通过使用 goroutine 来实现。

如果你想使用 mozillazg/request 库进行异步操作,你可以将 HTTP 请求的发送包装在一个 goroutine 中。下面是一个简单的示例,展示了如何使用 goroutine 来异步发送 HTTP 请求:

package main  

import (
"fmt"
"github.com/mozillazg/request"
"sync"
)

func main() {
var wg sync.WaitGroup

urls := []string{
"https://example.com",
"https://httpbin.org/get",
"https://api.example.com/data",
}

for _, url := range urls {
wg.Add(1)
go func(url string) {
defer wg.Done()
resp, err := request.Get(url)
if err != nil {
fmt.Printf("Error fetching URL %s: %s\n", url, err)
return
}
fmt.Printf("Fetched URL %s with status code: %d\n", url, resp.StatusCode)
}(url)
}

wg.Wait() // 等待所有 goroutine 完成
}

在上面的示例中,我们使用了 sync.WaitGroup 来等待所有的 goroutine 完成。对于 urls 切片中的每个 URL,我们启动了一个新的 goroutine 来异步发送 HTTP GET 请求。当所有请求都完成后,wg.Wait() 会返回,主函数继续执行并退出。

请注意,由于 HTTP 请求是异步发送的,因此响应的处理也需要在相应的 goroutine 中完成,以避免竞态条件。

另外,如果你发现 mozillazg/request 库不满足你的异步需求,你也可以考虑使用 Go 标准库中的 net/http 包来手动管理异步 HTTP 请求,或者使用其他支持异步操作的 HTTP 客户端库,如 github.com/valyala/fasthttp

还要注意的是,mozillazg/request 库可能不是最流行或最维护的 Go HTTP 客户端库。更常用的库包括 Go 标准库的 net/http 客户端或第三方库如 github.com/go-resty/resty/v2。在选择库时,请考虑库的活跃度、社区支持和功能集。