首页 > 其他分享 >Go:select时,如果通道已经关闭会怎么样?

Go:select时,如果通道已经关闭会怎么样?

时间:2024-11-01 14:19:53浏览次数:1  
标签:false func 关闭 time Go main select

1.for循环里被关闭的通道

package main

import (
	"fmt"
	"time"
)

func main() {
	c := make(chan int)
	go func() {
		time.Sleep(time.Second)
		c <- 10
		close(c)
	}()
	for {
		select {
		case x, ok := <-c:
			fmt.Println(x, ok)
			time.Sleep(500 * time.Millisecond)
		default:
			fmt.Println("xxx")
			time.Sleep(500 * time.Millisecond)
		}
	}
}
xxx
xxx
10 true
0 false
0 false
0 false
0 false

2.怎么样才能不读关闭后通道

package main

import (
	"fmt"
	"time"
)

func main() {
	c := make(chan int)
	go func() {
		time.Sleep(time.Second)
		c <- 10
		close(c)
	}()
	for {
		select {
		case x, ok := <-c:
			fmt.Println(x, ok)
			time.Sleep(500 * time.Millisecond)
			if !ok {
				c = nil
			}
		default:
			fmt.Println("xxx")
			time.Sleep(500 * time.Millisecond)
		}
	}
}

3.如果select里只有一个已经关闭的case,会怎么样?

package main

import (
	"fmt"
	"time"
)

func main() {
	c := make(chan int)
	go func() {
		time.Sleep(time.Second)
		c <- 10
		close(c)
	}()
	for {
		select {
		case x, ok := <-c:
			fmt.Println(x, ok)
			time.Sleep(500 * time.Millisecond)
		}
	}
}

10 true
0 false
0 false
0 false
0 false

4.select里只有一个已经关闭的case,置为nil,会怎么样?

panic

标签:false,func,关闭,time,Go,main,select
From: https://www.cnblogs.com/qcy-blog/p/18520091

相关文章

  • Gemini API 和 Google AI Studio 升级,提升搜索准确性和响应能力
    从今天开始,使用Google的GeminiAPI和 GoogleAIStudio 构建AI服务和机器人开发者,将能够通过Google搜索的数据来增强其提示结果,这将使得基于更新数据的响应更加准确。开发者可以在AIStudio中免费尝试这一功能,AIStudio是Google为开发者提供的测试和优化提示......
  • 为什么 Go 在 GC 时 STW 的时间很短
    Go语言在设计其垃圾回收(GC)机制时,强烈关注减少程序的停顿时间,特别是降低StopTheWorld(STW)的时长。通过采用三色标记法和写屏障技术,Go的GC在扫描和清理阶段减少了STW的时间。同时,运用背景处理和协程并发管理,进一步确保了垃圾回收的高效与流畅,从而在保持内存管理效率的......
  • Golang 开源库分享:anko - 给 Go 加点“脚本魔法”
    GitHub仓库链接:https://github.com/mattn/anko1.anko是干嘛用的?anko是一个可以让Go项目支持脚本语言的小工具。换句话说,就是我们可以给Go项目加点“脚本魔法”,在程序跑起来之后还能动态地改代码逻辑。比如,你在写一个应用,想让用户可以随时调整设置或控制程序的某些行为,而......
  • Go接口是什么
    Go接口是Go语言提供的一种抽象类型,它定义了一组方法,但是没有实现。而这些方法可以由任何满足接口定义的其他类型来实现。无论你是在编写库,还是构建大型的系统,理解和利用好Go接口都将极大地提升你的代码质量和编程效率。一、Go接口的定义和特征在Go语言中,接口是一种类型,它定义......
  • (开题报告)django+vue高校OA系统论文+源码
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于高校OA系统的研究,现有研究主要集中在传统开发技术或单一功能模块的优化上。在国内外,虽然OA系统已广泛应用于企业等领域,但专门针对......
  • (开题报告)django+vuejavaweb学生宿舍管理系统论文+源码
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于学生宿舍管理系统的研究,现有研究多集中于传统管理模式或单一功能模块的实现。在国内外,传统的学生宿舍管理方式主要依赖人工操作,效......
  • Goby 漏洞发布|Apache Solr /solr/admin/info/properties:/admin/info/key 权限绕过漏
    漏洞名称:ApacheSolr/solr/admin/info/properties:/admin/info/key权限绕过漏洞(CVE-2024-45216)EnglishName:ApacheSolr/solr/admin/info/properties:/admin/info/keyPermissionBypassVulnerability(CVE-2024-45216)CVSScore:7.3漏洞描述:ApacheSolr是一个开源搜索服......
  • ETLCloud遇上MongoDB:灵活数据流,轻松管理
    在当今数字化转型的大潮中,企业面临着数据管理的多重挑战。数据种类繁多、格式各异,传统关系型数据库往往难以满足这些复杂的需求。为了提升数据管理的灵活性与效率,越来越多的企业开始选择NoSQL数据库。而在众多NoSQL数据库中,MongoDB凭借其灵活的数据模型和强大的扩展性成为了佼佼者......
  • Flutter go_router库push导航后,浏览器地址栏的地址不更新的问题
    如果你使用.push()方法进行导航后,浏览器的地址栏的地址并没有更新,那是因为go_router经过了一次变更修改行为导致的。配置下边的GoRouter.optionURLReflectsImperativeAPIs=true;代码就行了。也可以去optionURLReflectsImperativeAPIs看属性说明。原文......
  • Django设置跨域请求解决方案
    Django设置跨域请求解决方案在现代Web开发中,跨域资源共享(CORS,Cross-OriginResourceSharing)是一个常见的需求。尤其是在前后端分离的开发模式下,Django作为后端框架,常常需要处理来自不同源的请求。本文将详细介绍如何在Django中设置跨域请求的解决方案,帮助开发者有效管理跨域请求......