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 的方式进行遍历,需要注意两个细节。

  1. a 在遍历时,如果 channel 没有关闭,则回出现 deadlock 的错误。
  2. 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语言实现抓取高清图片

    go语言实现抓取高清图片

    本文给大家分享的是使用go语言实现的抓取高清美女图片的代码,原理非常简单,这里就不多废话了,主要是看到很多小伙伴使用python实现的,心血来潮就用go写了下,推荐给大家。
    2015-03-03
  • golang移除切片索引位置的元素的两种方法

    golang移除切片索引位置的元素的两种方法

    本文主要介绍了golang移除切片索引位置的元素的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • golang日志包logger的用法详解

    golang日志包logger的用法详解

    这篇文章主要介绍了golang日志包logger的用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • golang 对象深拷贝的常见方式及性能

    golang 对象深拷贝的常见方式及性能

    这篇文章主要介绍了golang 对象深拷贝的常见方式及性能,Go语言中所有赋值操作都是值传递,如果结构中不含指针,则直接赋值就是深度拷贝,文章围绕主题展开更多相关资料,需要的小伙伴可以参考一下
    2022-06-06
  • 浅析Go语言如何避免数据竞争Data Race和竞态条件Race Condition

    浅析Go语言如何避免数据竞争Data Race和竞态条件Race Condition

    在并发编程中,数据竞争 (Data Race) 和 竞态条件 (Race Condition) 是两个常见的问题,本文将简单介绍一下二者如何避免,有需要的可以了解下
    2025-01-01
  • golang使用net/rpc库实现rpc

    golang使用net/rpc库实现rpc

    这篇文章主要为大家详细介绍了golang如何使用net/rpc库实现rpc,文章的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以参考一下
    2024-01-01
  • GoLand 2020.3 正式发布有不少新功能(支持泛型)

    GoLand 2020.3 正式发布有不少新功能(支持泛型)

    这是 2020 年第 3 个版本,也是最后一个版本,你还将发现许多新的代码编辑功能,具体内容详情跟随小编看看有哪些新特性
    2020-12-12
  • golang构建工具Makefile使用详解

    golang构建工具Makefile使用详解

    这篇文章主要为大家介绍了golang构建工具Makefile的使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • go内存缓存BigCache使用入门详解

    go内存缓存BigCache使用入门详解

    这篇文章主要为大家介绍了go内存缓存BigCache使用入门详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Go语言sync锁与对象池的实现

    Go语言sync锁与对象池的实现

    本文介绍了Go语言标准库sync包提供的并发控制工具,主要包括互斥锁(sync.Mutex)和读写锁(sync.RWMutex)两类同步机制,下面就来具体介绍一下这两个的使用,感兴趣的可以了解一下
    2025-08-08

最新评论