golang实现generator
来源:互联网 发布:谷歌娘软件下载 编辑:程序博客网 时间:2024/06/18 01:12
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
中取值。
阅读全文
0 0
- golang实现generator
- pyston的generator实现
- 手动实现mybatis generator
- generator标签实现分割
- Mybatis Generator实现过程
- JS异步实现Generator
- Golang实现Llog日志
- GOLANG 实现的 fastcgi
- Golang实现的红黑树
- avl树 golang实现
- golang实现快速排序
- Golang实现词频统计
- Golang实现AVL树
- 排序算法 golang 实现
- golang简单实现Websocket
- 选择算法-GoLang实现
- Golang实现ping
- Golang实现红黑树
- 组件间通信
- 影响cache的几个http头部
- 64-bit Tips
- IIFE
- MAC下搭建Android Studio
- golang实现generator
- lingo程序基本框架和逻辑运算符
- (1-2)Unity3D/2D:Sprite Renderer组件详解
- sourcemap
- 快速打造 Android 自定义表情库
- 数据库交互
- 高等代数第2章 行列式
- 机器学习-学习笔记 学习总结归纳(第四周)
- get和post