go 的 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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值