import (
"fmt"
"io"
"net/http"
)
func fetch(url string) string {
resp, err := http.Get(url)
if err != nil {
return err.Error()
}
defer resp.Body.Close()
written, err := io.Copy(io.Discard, resp.Body)
if err != nil {
return err.Error()
}
result := fmt.Sprintf("%s %s %d", url, resp.Status, written)
return result
}
func request() string {
ch := make(chan string)
go func() {
ch
这里假设 163.com goroutine 总是第一个执行完,此后 request 函数执行返回。
此时,进程未退出,另外两个 goroutine 仍将把 fetch 的结果发送到 ch ,但是由于 ch 是无缓存的,同时又因为 request 已经返回,
无人从 ch 中接收数据,所以另两个 goroutine 应该会死锁,一直无法退出才是。
但是实际执行时错不报错,这是为什么?多谢