package main
import "fmt"
func main() {
ch := make(chan int, 10)
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
for i := 0; i < 15; i++ {
fmt.Printf("--%v--\n", i)
va, ok := <-ch
fmt.Println("----", va, ok)
}
}
输出:
--0--
---- 0 true
--1--
---- 1 true
--2--
---- 2 true
--3--
---- 3 true
--4--
---- 4 true
--5--
---- 5 true
--6--
---- 6 true
--7--
---- 7 true
--8--
---- 8 true
--9--
---- 9 true
--10--
---- 0 false
--11--
---- 0 false
--12--
---- 0 false
--13--
---- 0 false
--14--
---- 0 false
可以看到已关闭的channel,数据也会全部被读完,读完之前ok一直为true。读完之后ok为false,value为类型的零值。