go之channel的遍历和关闭实践
更新时间:2026年06月25日 08:54:33 作者:chengqiuming
这段文章主要介绍了Go语言中channel的关闭与遍历机制,重点阐述了关闭channel后仍可读取数据、遍历channel时需注意的两个关键点以及实战应用
一 channel 的关闭
1 点睛
使用内置函数 close 可以关闭 channel, 当 channel 关闭后,就不能再向 channel 写数据了,但是仍然可以从该 channel 读取数据。
2 代码
package main
import (
"fmt"
)
func main() {
intChan := make(chan int, 3)
intChan <- 100
intChan <- 200
close(intChan) // close
// 这时不能够再写入数到 channel
// intChan<- 300
fmt.Println("okook~")
// 当管道关闭后,读取数据是可以的
n1 := <-intChan
fmt.Println("n1=", n1)
}3 测试
okook~ n1= 100
二 channel 的遍历
1 点睛
channel 支持 for range 的方式进行遍历,需要注意两个细节。
- a 在遍历时,如果 channel 没有关闭,则回出现 deadlock 的错误。
- b 在遍历时,如果 channel 已经关闭,则会正常遍历数据,遍历完后,就会退出遍历。
三 channel 遍历和关闭实战
1 代码
package main
import (
"fmt"
)
func main() {
// 遍历管道
intChan2 := make(chan int, 10)
for i := 0; i < 10; i++ {
intChan2 <- i * 2 // 放入100个数据到管道
}
close(intChan2)
for v := range intChan2 {
fmt.Println("v=", v)
}
}2 测试
v= 0 v= 2 v= 4 v= 6 v= 8 v= 10 v= 12 v= 14 v= 16 v= 18
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
浅析Go语言如何避免数据竞争Data Race和竞态条件Race Condition
在并发编程中,数据竞争 (Data Race) 和 竞态条件 (Race Condition) 是两个常见的问题,本文将简单介绍一下二者如何避免,有需要的可以了解下2025-01-01
GoLand 2020.3 正式发布有不少新功能(支持泛型)
这是 2020 年第 3 个版本,也是最后一个版本,你还将发现许多新的代码编辑功能,具体内容详情跟随小编看看有哪些新特性2020-12-12


最新评论