如何同时收听两个Golang频道?

I basically collect data through a scraper, and then want to process that data in two ways: either reject or accept. For not to slow down the scraper I pass the data either to a reject channel or accept channel. I need these channels to simultaneously listen for data in respective channel. This is my attempt so far:

func main() {
  okChannel := make(chan Article)
  rejectChannel := make(chan Article)

  scrape := new(scrapers)
  go Init(okChannel, rejectChannel)

  go func(okChannel chan Article) {
    for article := range okChannel {
        SaveArticle(article)
        fmt.Printf("SAVED")
    }
  }(okChannel)

  go func(rejectChannel chan Article) {
    for article := range rejectChannel {
        RejectArticle(article)
        fmt.Printf("REJECTED")
    }
  }(rejectChannel)

Please help

I'm not exactly sure what you mean. What you might want to do is have one channel that gives you all the information that you need based off of a data type that contains the information. Here's an example of what I mean.

type ArticleClassifier struct {
    Rejected bool
    Article  Article
}

func main() {
    classifierChannel := make(chan ArticleClassifier)
    go Init(classifierChannel)

    go func(ch chan ArticleClassifier) {
        for ac := range classifierChannel {
            if ac.Rejected {
                // Reject article
            } else {
                // Save article
            }
        }
    }
}

But it seems unnecessary to do that with your solution above. Maybe your issue is that the program will end early? If that's the problem, simply don't make the second listener a goroutine. Here's some refactored code from your example:

func main() {
    okChannel := make(chan Article)
    rejectChannel := make(chan Article)

    scrape := new(scrapers)
    go Init(okChannel, rejectChannel)

    go func(okChannel chan Article) {
        for article := range okChannel {
            SaveArticle(article)
            fmt.Printf("SAVED")
        }
    }(okChannel)

    for article := range rejectChannel {
        RejectArticle(article)
        fmt.Printf("REJECTED")
    }
}