golang à l'aide des dépassements de délais avec les canaux

Je suis en utilisant des goroutines/canaux de vérifier si la liste des url sont accessibles. Voici mon code. Cela semble toujours retourner la valeur true. Pourquoi est-ce que le délai de cas de ne pas arriver exécuté? L'objectif est de retour faux, même si l'une des url n'est pas accessible

import "fmt"
import "time"

func check(u string) bool {
    time.Sleep(4 * time.Second)
    return true
}

func IsReachable(urls []string) bool {

    ch := make(chan bool, 1)
    for _, url := range urls {
        go func(u string) {
            select {
            case ch <- check(u):
            case <-time.After(time.Second):
                ch<-false
            }
        }(url)
    }
    return <-ch
}
func main() {
    fmt.Println(IsReachable([]string{"url1"}))
}

OriginalL'auteur Kamal | 2014-05-10