Go言語で並行リクエストを実現する方法は何ですか?
Go言語では、goroutineとチャネルを使って並行リクエストを実現することができます。以下は簡単な例です:
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に送信します。
最後に、全てのリクエストの完了を待つためにループを使用し、結果をチャネルから集めます。これにより、複数のリクエストを並行して送信し、全てのリクエストが完了した後に結果を処理することができます。