1 回答
TA贡献1719条经验 获得超6个赞
对于通道 c,内置函数 close(c) 记录不会在通道上发送更多值。在调用 close 之后,并且在接收到任何先前发送的值之后,接收操作将在不阻塞的情况下返回通道类型的零值。
在通道缓冲区中有 5 个先前发送的值,然后是关闭。
例如,
package main
import (
"fmt"
"sync"
"time"
)
func main() {
iCh := make(chan int, 99)
var wg sync.WaitGroup
go func() {
for i := 0; i < 5; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
iCh <- i
}(i)
}
wg.Wait()
close(iCh)
}()
time.Sleep(5 * time.Second)
fmt.Println("previously sent values", len(iCh))
for i := range iCh {
fmt.Printf("%v\n", i)
}
print("the channel should be closed by now\n")
print("done")
}
输出:
previously sent values 5
0
1
2
3
4
the channel should be closed by now
done
- 1 回答
- 0 关注
- 197 浏览
添加回答
举报