这是我写的一个函数,它向请求队列添加一个请求:
func (self *RequestQueue) addRequest(request *Request) {
self.requestLock.Lock()
self.queue[request.NormalizedUrl()] = request.ResponseChannel
self.requestLock.Unlock()
}
这是其中一项测试:
func TestAddRequest(t *testing.T) {
before := len(rq.queue)
r := SampleRequests(1)[0]
rq.addRequest(&r)
if (len(rq.queue) - 1) != before {
t.Errorf("Failed to add request to queue")
}
}
当我运行此测试时,应用程序挂起。如果我评论这个测试,一切正常。 我认为问题是函数内部的锁定。有什么我做错了吗? 谢谢你的帮助!
答案 0 :(得分:0)
问题是SampleRequests()函数中的无限循环:
func SampleRequests(num int) []Request {
requests := make([]Request, num, num+10)
for i := 0; i < len(requests); i++ {
r := NewRequest("GET", "http://api.openweathermap.org/data/2.5/weather", nil)
r.Params.Set("lat", "35")
r.Params.Add("lon", "139")
r.Params.Add("units", "metric")
requests = append(requests, r)
}
return requests
}
我正在检查i
是否小于for循环的延续条件中数组的长度。每次迭代时,一个项目被添加到数组中,长度增加并且for循环继续执行。