【发布时间】:2021-01-17 18:56:24
【问题描述】:
func main() {
links := []string{
"http://google.com",
"http://amazon.com",
"http://golang.org",
"http://yahoo.com",
"http://ebay.com",
}
c := make(chan string)
for _, link := range links {
testRequest(link, c)
}
msg := <-c
fmt.Println(msg)
}
func testRequest(s string, c chan string) {
_, err := http.Get(s)
if err != nil {
fmt.Println(s, "Is down presently")
c <- "Something might be down"
return
}
fmt.Println(s, "Is working perfectly")
c <- "Working great!"
}
通道应该是一个引用类型,由于某种原因,该函数没有向通道传递任何内容,因为每次我运行代码时,它都会按预期打印出第一行,但程序不会停止运行,而且不执行 fmt.Println(channel) 所以我的假设是没有值被传递到通道,因为它应该是,有什么原因吗?
【问题讨论】:
-
这里的问题是程序没有退出,也没有打印来自通道@MuffinTop的值
-
糟糕,搞错了。程序阻塞发送到通道
c。在发送方和接收方准备好之前,无缓冲通道c上的通信不会继续进行。所有发送在单次接收之前执行。