我正在使用goroutines /頻道來檢查是否可以到達URL列表。這是我的代碼。這似乎總是返回真實。爲什麼超時情況沒有得到執行?我們的目標是返回false,即使有一個網址無法訪問golang使用頻道超時
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"}))
}
謝謝。實際上,如果其中一個無法訪問,我想返回不可訪問。因此,只有在超時和time.AfterFunc可以在總超時後寫入true時,檢查函數纔會寫入「false」以便通道在通道未能到達url(並且在達到url時不寫入任何內容)。 – Kamal