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中取值。

上一篇:SQL Server SQL语句调优技巧
下一篇:修改运行中的docker容器的环境

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月08日 18时22分04秒