Golang channel【管道】的关闭和遍历
一:channel的关闭
使用内置函数close可以关闭channel,当channel关闭后,就不能再向channel写数据了,但是仍然可以从该channel读取数据
代码案例:
package main
import "fmt"
func main() {
iniChan := make(chan int, 3)
iniChan <- 100
iniChan <- 200
close(iniChan)
//这时不能再写入数据
// iniChan <- 300
fmt.Println("ok")
//当管道关闭后,读取数据是可以的
n1 := <-iniChan
fmt.Println("n1=", n1)
}
二:channel的遍历
channel支持for-range的方式进行遍历
- 在遍历时,如果channel没有关闭,则会出现
deadlock的错误 - 在遍历时,如果channel已经关闭,则正常遍历数据,遍历完后,就会退出遍历
代码案例:
package main
import "fmt"
func main() {
iniChan := make(chan int, 3)
iniChan <- 100
iniChan <- 200
close(iniChan)
//这时不能再写入数据
// iniChan <- 300
fmt.Println("ok")
//当管道关闭后,读取数据是可以的
n1 := <-iniChan
fmt.Println("n1=", n1)
//给管道存放100个数据
iniChan2 := make(chan int, 100)
for i := 0; i < 100; i++ {
iniChan2 <- i * 2
}
close(iniChan2) //关闭管道,否则会死锁,直接报错 deadlock
//遍历管道【不能使用普通的for循环】
for v := range iniChan2 {
fmt.Println("v=", v)
}
}
本文来自博客园,作者:Carver大脸猫,转载请注明原文链接:https://www.cnblogs.com/carver/articles/18458819

浙公网安备 33010602011771号