Go语言可以通过使用goroutine和channel来实现并行请求。以下是一个简单的示例:
package main
import (
"fmt"
"net/http"
"time"
)
func main() {
// 创建一个通道,用于接收请求结果
results := make(chan string)
// 定义一组URL
urls := []string{
"https://www.google.com",
"https://www.baidu.com",
"https://www.github.com",
}
// 遍历URL,为每个URL启动一个goroutine进行并行请求
for _, url := range urls {
go request(url, results)
}
// 等待所有请求完成,并收集结果
for i := 0; i < len(urls); i++ {
result := <-results
fmt.Println(result)
}
}
func request(url string, results chan<- string) {
// 发送HTTP GET请求
resp, err := http.Get(url)
if err != nil {
results <- fmt.Sprintf("Error requesting %s: %s", url, err)
return
}
defer resp.Body.Close()
// 模拟处理响应的延迟
time.Sleep(time.Second)
// 读取响应内容
results <- fmt.Sprintf("Request to %s completed with status code %d", url, resp.StatusCode)
}
在上面的示例中,我们创建了一个通道results
用于接收请求结果。然后,我们定义了一组URL,并使用go
关键字启动了一组goroutine来并行发送请求。每个goroutine执行request
函数,该函数发送HTTP GET请求并将响应结果发送到通道results
中。
最后,我们使用一个循环来等待所有请求完成,并从通道results
中收集结果。这样,我们就可以并行发送多个请求,并在所有请求完成后处理结果。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/841085.html