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に送信します。

最後に、全てのリクエストの完了を待つためにループを使用し、結果をチャネルから集めます。これにより、複数のリクエストを並行して送信し、全てのリクエストが完了した後に結果を処理することができます。

bannerAds