这段代码应该有一个错误。我的伙伴告诉我它包含内存泄漏,并且在 go 函数完成之前在 select 语句中发生超时情况时会发生这种情况,他还告诉我向 ch 添加大小为 1 的缓冲区可以解决问题。但是我很难理解为什么它会解决问题,如果有人可以为我解释一下,我会很感激吗?我试图自己寻找答案,但没有成功。
谢谢。
func Read(url string, timeout time.Duration) (res *Response) {
ch := make(chan *Response)
go func() {
time.Sleep(time.Millisecond * 300)
ch <- Get(url)
}()
select {
case res = <-ch:
case <-time.After(timeout):
res = &Response{"Gateway timeout\n", 504}
}
}
繁星淼淼
相关分类