/*
    go遍历通道
    我们知道range函数可以遍历数组 切片 字典 这里我们可以使用range函数
    来遍历通道以接收通道数据
*/

package main

import (
    "fmt"
)

func main() {
    //遍历queue通道里面的两个数据
    /*
           知识点:
              make()
              chan string
              make(chan string, 2)
              构建管道
              close(queue)
              关闭以后就不能往管道里写了
    */
    queue := make(chan string, 2)
    queue <- "one"
    queue <- "two"

    close(queue)

    /*
        range函数遍历每个从通道接收的数据
        因为queue在发送完两个数据之后就关闭了通道
        所以这里我们range函数在接收到两个数据之后就结束了
        如果上面的queue通道不关闭 那么range函数就不会结束 从而在接收第三个数据的时候
        就阻塞了
    */

    for elem := range queue {
        fmt.Println(elem)
    }

    /*
      这个例子同时说明了 即使关闭了一个非空通道 我们任然可以从通道里面接收到值
    */
}