Golang 中执行了 context 的 Cancel,但
为什么 golang 中执行了 context 的 cancel,但
在给定的代码示例中,gen 函数生成一个通道,在收到 ctx.done() 信号时打印 "done",否则生成并发送一个数字。main 函数使用 withcancel 创建了一个有取消功能的 context,并通过调用 cancel 取消它。
预期的是,当执行 cancel() 时,
解决这个问题的方法是在 gen 函数中在关闭 context 时关闭通道。这将导致 range 循环结束,并允许
func gen(ctx context.Context) <-chan interface{} { ch := make(chan interface{}) go func() { n := 0 for { select { case <-ctx.Done(): fmt.Println("done") close(ch) // 关闭通道,range 结束 return default: n += 1 ch <- n } } }() return ch }
以上就是Golang 中执行了 context 的 Cancel,但的详细内容,更多请关注硕下网其它相关文章!