
golang实现generator
发布日期:2021-05-08 04:53:27
浏览次数:20
分类:精选文章
本文共 863 字,大约阅读时间需要 2 分钟。
python和nodejs都可以是使用yield关键字,实现一个generator。
- python版:
def generator(): n = 0 while True: yield n n = n+1for i in generator(): if i < 10: print(i) else: break
- nodejs版
function *generator() { let n = 0 while(true) { yield n n = n+1 }}for (i of generator()) { if (i < 10) { console.log(i) }else { break }}
但是golang没有yield关键字,如何实现使用golang实现一个类似上面的generator呢?
可以使用channel 配合gorotine来实现:package mainimport "fmt"func generator() chan int { c := make(chan int) n := 0 go func() { for { c <- n n = n + 1 } }() return c}func main() { for i := range generator() { if i == 5 { break } fmt.Println(i) }}
generator 直接返回了一个channel c
, 这个channel c
使用一个旁路(goroutine)在一旁一直尝试往里面放数值。如果不能放,这个 goroutine阻塞等待。在main函数中,使用range从channel c
中取值。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月08日 18时22分04秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
279 完全平方数(bfs)
2021-05-07
875 爱吃香蕉的珂珂(二分查找)
2021-05-07
第十一届蓝桥杯python组第二场省赛-数字三角形
2021-05-07
BST中某一层的所有节点(宽度优先搜索)
2021-05-07
广度优先搜索
2021-05-07
Dijkstra算法的总结
2021-05-07
C语言的运算符和表达式
2021-05-07
Vue实现选项卡功能
2021-05-07
uni-app请求头中携带token
2021-05-07
vue中接收后台的图片验证码并显示
2021-05-07
Vue入门学习笔记(1)
2021-05-07
趣谈win10常用快捷键
2021-05-07
数学建模更新12(数学线性规划模型1)
2021-05-07
Android,SharedPreferences的使用
2021-05-07
两款用于检测内存泄漏的软件
2021-05-07
王爽 《汇编语言》 读书笔记 三 寄存器(内存访问)
2021-05-07