On 11/13/2017 04:10 AM, [email protected] wrote:
> for range os.Args[1:] {
> fmt.Println(<-ch)
> }
> fmt.Printf("%.2fs elasped\n", time.Since(start).Seconds())
> }
If I understand correctly, you want fetch() to get each URL twice but
you only read from the 'ch' channel once per URL.
So if I passed it 3 urls, we should expect to receive at least 6
responses back on ch but you only read from it 3 times.
If that loop above was something more like (and this is a kludge):
for range append(os.Args[1:], os.Args[1:]...) {
fmt.Println(<-ch)
}
or maybe better:
for i := 0; i < len(os.Args[1:]) * 2; i++ {
fmt.Println(<-ch)
}
The problem is that you return from fetch() early if there is an error
so you might end up blocking on <-ch forever because the number of sends
to that channel will not match the number of receives.
If I were you, I'd consider using a sync.WaitGroup to wait for all of
the fetch() calls to complete and store the results in a buffered channel.
Once all of the fetch() calls are done, you can close the channel and
range over it like this:
https://play.golang.org/p/iCNyvpE4Y1
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.