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
中收集結果。這樣,我們就可以并行發送多個請求,并在所有請求完成后處理結果。