【1】管道的关闭:
使用内置函数close可以关闭管道,当管道关闭后,就不能再向管道写入数据了,但是仍然可以从该管道读取数据。(类似商城排队限流,一旦进去10个人后,保安拉取一个警戒线,不准外面的人在进入了,但是里面进去的10个人,仍然可以进行操作)
package main
import "fmt"
func main() {
//定义一个int类型的管道
var intChan chan int
//通过make初始化:管道可以存放3个int类型的数据
intChan = make(chan int, 3)
//向管道存放数据,箭头指向管道:
intChan <- 10
intChan <- 20
//关闭管道
close(intChan)
//再次写入数据:-----报错:send on closed channel
//intChan <- 30
//当管道关闭后,读取数据是可以的:
num := <-intChan
fmt.Println(num)
}
管道的遍历
管道支持for-range的方式进行遍历,请注意两个细节
1、在遍历时,如果管道没有关闭,则会出现deadlock的错误
2、在遍历时,如果管道已经关闭,则会正常遍历数据,遍历完后,就会退出遍历
package main
import "fmt"
func main() {
//定义一个int类型的管道
var intChan chan int
//通过make初始化:管道可以存放100个int类型的数据
intChan = make(chan int, 100)
for i := 0; i < 100; i++ {
intChan <- i
}
//在遍历前,如果没有关闭管道,就会出现deadlock的错误,所以在遍历前,需要进行关闭管道
//关闭管道
close(intChan)
//遍历
for v := range intChan {
fmt.Println("value= ", v)
}
}