Waitgroup
显式等待并在其关闭之后关闭通道...但是程序不会退出。谢谢您的帮助([https://play.golang.org/p/lto2DytWH13)
package main
import (
"fmt"
"net/http"
"sync"
)
var wg sync.WaitGroup
func main() {
links := []string{
"http://google.com",
"http://facebook.com",
"http://stackoverflow.com",
"http://golang.org",
"http://amazon.com",
}
wg.Add(len(links))
c := make(chan string)
for _, link := range links {
go checkLink(link, c, &wg)
}
wg.Wait()
close(c)
for u := range c {
fmt.Println(u)
}
}
func checkLink(link string, c chan string, wg *sync.WaitGroup) {
_, err := http.Get(link)
if err != nil {
fmt.Println(link, "might be down!")
c <- link
return
}
fmt.Println(link, "is up!")
c <- link
wg.Done()
}
is up!
消息,并开始等待写入通道。主goroutine等待所有goroutine退出,然后关闭通道并从中读取。此时,所有goroutine都处于睡眠状态。wg.Done()
。 go func() {
wg.Wait()
close(c)
}()