package main
import (
"fmt"
"net/http"
)
func fetchURL(url string, resultChan chan string) {
resp, err := http.Get(url)
if err != nil {
resultChan <- fmt.Sprintf("Error fetching %s: %v", url, err)
return
}
defer resp.Body.Close()
resultChan <- fmt.Sprintf("Successfully fetched %s", url)
}
func main() {
urls := []string{
"http://example.com",
"http://google.com",
"http://github.com",
}
resultChan := make(chan string)
defer close(resultChan)
for _, url := range urls {
go fetchURL(url, resultChan)
}
results := make([]string, len(urls))
for i := 0; i < len(urls); i++ {
results[i] = <-resultChan
}
for _, result := range results {
fmt.Println(result)
}
}
fetchURL
函数:
- 该函数接收一个URL和一个
resultChan
。
- 它使用
http.Get
发起HTTP GET请求。如果请求出错,将错误信息发送到 resultChan
。
- 如果请求成功,将成功信息发送到
resultChan
。
main
函数:
- 定义一个URL切片。
- 创建一个
resultChan
用于接收请求结果。
- 使用
go
关键字启动多个 goroutine
来并发执行 fetchURL
函数,每个 goroutine
处理一个URL。
- 使用一个循环从
resultChan
中接收结果,并存储到 results
切片中。
- 最后,遍历
results
切片并打印每个结果。