Golang channel关闭的实现示例

 更新时间:2024年01月11日 11:27:05   作者:富士康质检员张全蛋  
channel关闭不当或不关闭会引发很多问题,本文主要介绍了Golang channel关闭的实现示例,具有一定的参考价值,感兴趣的可以了解一下

使用内置函数close可以关闭channel,当channel关闭后,就不能再向channel写数据了,但是仍然可以从channel中读取数据。

一旦将channel关闭了,只能读不能写。相当于关闭管道就数据不能进入到队列里面了,只能进行读操作,只读不写。

channel支持for-range的方式进行遍历,请注意两个细节

(1)在遍历时,如果channel没有关闭,则回出现deadlock的错误

(2)在遍历时,如果channel已经关闭,则会正常遍历数据,遍历完后,就会退出遍历。

下面这种遍历方式肯定是错误的,每次取出来数据长度都会减1,容量方式也一样不是真实的长度,所以只能使用for rang方式。 

func main() {
	intChan := make(chan int, 3)
	intChan <- 100
	intChan <- 200
	close(intChan) //关闭管道

	//当管道关闭之后,读取数据是没有问题的
	num := <-intChan
	fmt.Println(num)

	//从管道里面依次取出这样的值,管道是先进先出的队列,值也是按照顺序取出来的
	for v := range intChan {
		fmt.Println(v)
	}
}
func main() {
	intChan := make(chan int, 3)

	//向管道写入数据
	intChan <- 1
	num := 2
	intChan <- num

	for i := 0; i < 1; i++ {
		v, ok := <-intChan
		fmt.Println(v, ok)
	}

	fmt.Println(".....................")
	
    close(intChan)
	for i := 0; i < 10; i++ {
		v, ok := <-intChan
		fmt.Println(v, ok)
	}

}


1 true
.....................
2 true
0 false
0 false
0 false
0 false
0 false
0 false
0 false
0 false
0 false

到此这篇关于Golang channel关闭的实现示例的文章就介绍到这了,更多相关Golang channel关闭内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Go开发中有哪几种无法恢复的致命场景分析

    Go开发中有哪几种无法恢复的致命场景分析

    这篇文章主要为大家介绍了Go有哪几种无法恢复的致命场景示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Go语言Mock使用基本指南详解

    Go语言Mock使用基本指南详解

    这篇文章主要介绍了Go语言Mock使用基本指南详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Go gRPC服务客户端流式RPC教程

    Go gRPC服务客户端流式RPC教程

    这篇文章主要为大家介绍了Go gRPC服务客户端流式RPC教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • GOLANG版的冒泡排序和快速排序分享

    GOLANG版的冒泡排序和快速排序分享

    这篇文章主要介绍了GOLANG版的冒泡排序和快速排序分享,需要的朋友可以参考下
    2015-03-03
  • 浅析Go语言中包的介绍与初始化

    浅析Go语言中包的介绍与初始化

    这篇文章主要为大家详细介绍了Go语言中包的介绍与初始化,从而搞清Go程序的执行次序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解下
    2023-10-10
  • 基于微服务框架go-micro开发gRPC应用程序

    基于微服务框架go-micro开发gRPC应用程序

    这篇文章介绍了基于微服务框架go-micro开发gRPC应用程序的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Go语言程序开发gRPC服务

    Go语言程序开发gRPC服务

    这篇文章主要为大家介绍了Go语言程序开发gRPC服务,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 浅析Go设计模式之Facade(外观)模式

    浅析Go设计模式之Facade(外观)模式

    本文将介绍外观模式的概念、结构和工作原理,并提供一些在Go中实现外观模式的示例代码,通过使用外观模式,可以降低代码的耦合度,提高代码的可维护性和可读性,需要的朋友可以参考下
    2023-05-05
  • Golang 分割字符串的实现示例

    Golang 分割字符串的实现示例

    本文主要介绍了Golang 分割字符串的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • GO实现文件上传操作

    GO实现文件上传操作

    这篇文章主要为大家详细介绍了GO实现文件上传操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07

最新评论