当没有更多值要发送时,您将关闭通道,因此在这种情况下,所有
checkUrlgoroutine已完成。
var wg sync.WaitGroupfunc checkUrls(urls []string) { c := make(chan string) for _, link := range urls { wg.Add(1) go checkUrl(link, c) } go func() { wg.Wait() close(c) }() for msg := range c { fmt.Println(msg) }}func checkUrl(url string, c chan string) { defer wg.Done() _, err := http.Get(url) if err != nil { c <- "We could not reach:" + url } else { c <- "Success reaching the website:" + url }}(请注意,
errorfrom
http.Get仅将反映连接和协议错误。如果您也期望这些错误,则它不会包含http服务器错误,您必须了解如何检查路径,而不仅仅是主机。)



