Вы закрываете канал, когда больше нет значений для отправки, так что в этом случае это когда все процедуры checkUrl
завершены.
var wg sync.WaitGroup
func 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
}
}
(Обратите внимание, что error
из http.Get
будет отражать только ошибки соединения и протокола. Он не будет содержать ошибок http-сервера, если вы ожидаете их тоже, что вы должны видеть, как вы проверка путей, а не только хостов.)