一种选择是使用渠道.通道在某种程度上类似于迭代器,您可以使用range关键字迭代它们.但是当你发现你不能在没有泄漏goroutine的情况下突破这个循环时,使用会变得有限.
在go中创建迭代器模式的惯用方法是什么?
编辑:
渠道的根本问题在于它们是推模型.迭代器是拉模型.你不必告诉iterator停止.我正在寻找一种以一种很好的表达方式迭代集合的方法.我还想链接迭代器(map,filter,fold alternative).
在查看一些golang代码时,我发现了以下内容:
ch := make(chan int)
Run Code Online (Sandbox Code Playgroud)
我在golang Chanels的在线教程中查了解:
https://tour.golang.org/concurrency/2
但我觉得这个例子不清楚.
有人可以给我一个简单的解释和使用频道的例子吗?
最近我参加了几次围棋面试.第一个问我How is channel implemented?,然后第二个问我How is goroutine implemented?.你可以猜到,下一个问道How is a Go interface implemented?.
我一直在使用Go六个月,但说实话,我从来没有关心或知道这些Go internals.
我试着通过阅读Go的源代码来学习这些,但却无法真正理解这些精髓.
所以问题是,对于Go中的菜鸟,我如何学习Go internals?