diff --git a/cmd/root.go b/cmd/root.go index 18e84f8..7fe652f 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -41,26 +41,21 @@ func formatItem(item *gofeed.Item, tmpl *template.Template) (string, error) { // along with any parsing errors. func parseFeeds(urls []string) ([]*gofeed.Feed, []error) { fp := gofeed.NewParser() - feedChs := make([]chan *gofeed.Feed, len(urls)) - errChs := make([]chan error, len(urls)) - - for i, url := range urls { - feedCh := make(chan *gofeed.Feed) - errCh := make(chan error) - go func(url string) { - feed, err := fp.ParseURL(url) - feedCh <- feed - errCh <- err - }(url) - feedChs[i] = feedCh - errChs[i] = errCh - } - feeds := make([]*gofeed.Feed, len(urls)) errs := make([]error, len(urls)) - for i := range feedChs { - feeds[i] = <-feedChs[i] - errs[i] = <-errChs[i] + done := make(chan int) + + for i, url := range urls { + go func(i int, url string) { + feed, err := fp.ParseURL(url) + feeds[i] = feed + errs[i] = err + done <- i + }(i, url) + } + + for i := 0; i < len(urls); i++ { + <-done } return feeds, errs