【发布时间】:2018-07-10 16:11:03
【问题描述】:
快速解释代码:
- 我的范围是
db.Feeds(),这是一个 RSS 提要 url 列表。 - 我正在通过 goroutine 获取
getFeeds()函数中的提要 -
getFeeds()的输出返回到 rss 频道 -
然后我打印 RSS 信息
func main() { rss := make(chan feed) for _, url := range db.Feeds() { go getFeeds(url, rss) } for range db.Feeds() { newFeed := <-rss fmt.Println(newFeed.Channel.Title, newFeed.Channel.Description) } }
我的问题如下:当我直接打印 newFeed 变量时,它不会显示来自 rss 通道的所有结果,只显示第一个。
我似乎必须覆盖db.Feeds()(RSS 提要网址列表)并从包含 go getFeeds() 的 for 循环中打印频道结果,以显示所有结果。
为什么会这样?尽管对于范围的每个循环,我都会返回到 rss 通道并打印结果,而不必第二次超过db.Feeds()?
任何澄清都有很大帮助,我是 Go 新手!喜欢它,但我还没有理解该语言的某些方面。
【问题讨论】:
标签: for-loop go concurrency range goroutine