无法理解Go语言上下文示例

vuktfyat  于 2023-03-16  发布在  Go
关注(0)|答案(1)|浏览(122)

我无法理解上下文包go library. package main中的示例

import (
    "context"
    "fmt"
)

func main() {
    gen := func(ctx context.Context) <-chan int {
        dst := make(chan int)
        n := 1
        go func() {
            for {
                select {
                case <-ctx.Done():
                    return // returning not to leak the goroutine
                case dst <- n:

                    n++
                }
            }
        }()
        return dst
    }

    ctx, cancel := context.WithCancel(context.Background())
    defer cancel() // cancel when we are finished consuming integers

    for n := range gen(ctx) {
        fmt.Println(n)
        if n == 5 {
            break
        }
    }
}

谁能给我举个例子?
我试着在程序中添加日志,但无法理解。gen函数被调用了一次,但它是如何返回5个通道的

ioekq8ef

ioekq8ef1#

gen仅返回一个通道。for range语句可与通道一起使用,以迭代其接收的消息。因此,在上下文示例中,n是通过gen创建并返回的dst通道接收的值。
有关详细信息,请阅读:对于带有range子句的语句。

相关问题