我无法理解上下文包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个通道的
1条答案
按热度按时间ioekq8ef1#
gen
仅返回一个通道。for range
语句可与通道一起使用,以迭代其接收的消息。因此,在上下文示例中,n
是通过gen
创建并返回的dst
通道接收的值。有关详细信息,请阅读:对于带有range子句的语句。