1. package main
    2. import "fmt"
    3. func main() {
    4. ch := make(chan int, 10)
    5. for i := 0; i < 10; i++ {
    6. ch <- i
    7. }
    8. close(ch)
    9. for i := 0; i < 15; i++ {
    10. fmt.Printf("--%v--\n", i)
    11. va, ok := <-ch
    12. fmt.Println("----", va, ok)
    13. }
    14. }

    输出:

    1. --0--
    2. ---- 0 true
    3. --1--
    4. ---- 1 true
    5. --2--
    6. ---- 2 true
    7. --3--
    8. ---- 3 true
    9. --4--
    10. ---- 4 true
    11. --5--
    12. ---- 5 true
    13. --6--
    14. ---- 6 true
    15. --7--
    16. ---- 7 true
    17. --8--
    18. ---- 8 true
    19. --9--
    20. ---- 9 true
    21. --10--
    22. ---- 0 false
    23. --11--
    24. ---- 0 false
    25. --12--
    26. ---- 0 false
    27. --13--
    28. ---- 0 false
    29. --14--
    30. ---- 0 false

    可以看到已关闭的channel,数据也会全部被读完,读完之前ok一直为true。读完之后ok为false,value为类型的零值。