你不是在等待回复。这相当于:
urls := []*U{
&U{"example", "http://www.example.com", nil},
&U{"yahoo", "http://www.yahoo.com", nil},
&U{"google", "http://www.google.com", nil},
}
for i, u := range urls {
fmt.Println(i, u.resp) // all nil
}
相反,你可以用
sync.WaitGroup
要确保在显示响应之前完成所有工作,请执行以下操作:
var wg sync.WaitGroup
for _, u := range urls {
wg.Add(1) // Add job to the waitgroup
go func(u *U) {
var err error
u, err = getResponse(u)
if err != nil {
fmt.Println(err)
}
ch <- u
wg.Done() // Note when the job is done
}(u)
}
wg.Wait() // wait until all the Add'd jobs are Done'd
for i, u := range urls {
fmt.Println(i, u.resp) // all nil
}
或者您可以在同一个链中处理打印响应
getResponse
以下内容:
for _, u := range urls {
go func(u *U) {
var err error
u, err = getResponse(u)
if err != nil {
fmt.Println(err)
}
printResponse(u) // implement printResponse however
ch <- u
}(u)
}