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
中收集结果。这样,我们就可以并行发送多个请求,并在所有请求完成后处理结果。