go语言(二十一)---- channel的关闭

  1. channel不像文件一样需要经常去关闭,只有当你确实没有任何发送数据了,或者你想显示的结束range循环之类的,才去关闭channel。
  2. 关闭channel后,无法向channel再发送数据,(引发pannic错误后,导致接收立即返回零值)
  3. 关闭channel后,可以继续从channel中接收数据
  4. 对于nil channel,无论收发都会被阻塞。

如果没有close,会出现死锁。

package mainimport "fmt"func main() {c := make(chan int)go func() {for i := 0;i < 5;i++ {c <- i}//close 关闭一个 channel//close(c)}()for {//ok 如果为true,表示 channel	没有关闭,如果为false,表示channel已经关闭if data,ok := <-c; ok{fmt.Println(data)} else {break}}fmt.Println("Main Finished....")
}

在这里插入图片描述
加上close后

package mainimport "fmt"func main() {c := make(chan int)go func() {for i := 0;i < 5;i++ {c <- i}//close 关闭一个 channelclose(c)}()for {//ok 如果为true,表示 channel	没有关闭,如果为false,表示channel已经关闭if data,ok := <-c; ok{fmt.Println(data)} else {break}}fmt.Println("Main Finished....")
}

在这里插入图片描述
如果像关闭的channel发送数据,会报panic的错误,如下所示:

package mainimport "fmt"func main() {c := make(chan int)go func() {for i := 0;i < 5;i++ {c <- iclose(c)}//close 关闭一个 channel}()for {//ok 如果为true,表示 channel	没有关闭,如果为false,表示channel已经关闭if data,ok := <-c; ok{fmt.Println(data)} else {break}}fmt.Println("Main Finished....")
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/652106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux编译实时内核和打补丁

目录 1.Linux内核2.实时内核3.编译实时内核3.1 准备3.2 获取内核源码3.3 编译3.4 设置GRUB确保启动到实时内核 4.给内核打补丁5.安装新的内核 1.Linux内核 https://github.com/torvalds/linux Linux内核是Linux操作系统的核心部分&#xff0c;它是操作系统的基本组成部分&…

Python在网络安全防御中的应用与实践

在网络安全防御的实践中&#xff0c;我们通常需要进行网络监控、数据分析和入侵检测等任务。编程语言是实现这些功能不可或缺的工具&#xff0c;而Python以其简洁的语法和强大的库支持&#xff0c;在网络安全领域得到了广泛应用。 一、网络监控&#xff1a;使用Python检测端口…

spring整合mybatis的底层原理

spring整合mybatis的底层原理 原理&#xff1a; FactoryBean的自定义对象jdk动态代理Mapper接口对象 一、手写一个spring集成mybatis 目录结构&#xff1a; 1.1 入口类 public class Test {public static void main(String[] args) {AnnotationConfigApplicationContext co…

Linux中的软链接与硬链接

Linux链接概念 Linux链接分两种&#xff0c;一种被称为硬链接&#xff08;Hard Link&#xff09;&#xff0c;另一种被称为符号链接&#xff08;Symbolic Link&#xff09;。默认情况下&#xff0c;使用 ln 命令不加参数创建硬链接&#xff0c;加 -s 参数则创建软链接 硬链接…

【mongoDB】创建用户账号和权限

使用use database_name 命令创建或切换到一个数据库 查看用户 show users 输入该命令后&#xff0c;无数据表示该数据库没有用户 创建用户 user:" freedom " 表示用户名为freedom pwd:" 123456 ” 表示密码为123456 roles:[" root "] …

一键去除图片背景——background-removal-js

一些JavaScript库和工具可以帮助实现背景去除&#xff1a; OpenCV.js&#xff1a;OpenCV的JavaScript版本&#xff0c;提供了许多计算机视觉功能&#xff0c;包括背景去除。Jimp&#xff1a;一个用于处理图像的JavaScript库&#xff0c;提供了许多图像处理功能&#xff0c;包括…

Linux的几个常用基本指令2

目录 1.more指令2.less指令3.head指令4.tail指令5.时间相关的指令5.1在显示方面&#xff0c;使用者可以设定欲显示的格式&#xff0c;格式设定为一个加号后接数个标记&#xff0c;其中常用的标记列表如下5.2在设定时间方面5.3时间戳 6.Cal指令7.find指令8.grep指令9.zip/unzip指…

Deepin基本环境查看(六)【计算机、回收站、控制面板、文档、设备管理器】

Deepin基本环境查看 - 目录Deepin基本环境查看&#xff08;一&#xff09;【基本信息】Deepin基本环境查看&#xff08;二&#xff09;【内存】Deepin基本环境查看&#xff08;三&#xff09;【网络信息】Deepin基本环境查看&#xff08;四&#xff09;【硬盘/分区、文件系统、…

Redis:Could not get a resource from the pool

起初在JedisPool中配置了50个活动连接&#xff0c;但是程序还是经常报错&#xff1a;Could not get a resource from the pool&#xff0c;附代码 >> JedisPoolConfig config new JedisPoolConfig(); config.setMaxTotal(50); config.setMaxIdle(20); config.setMaxWai…

鸿蒙ArkUI 宫格+列表+HttpAPI实现

鸿蒙ArkUI学习实现一个轮播图、一个九宫格、一个图文列表。然后请求第三方HTTPAPI加载数据&#xff0c;使用了axios鸿蒙扩展库来实现第三方API数据加载并动态显示数据。 import {navigateTo } from ../common/Pageimport axios, {AxiosResponse } from ohos/axiosinterface IDa…

第5章 (python深度学习——波斯美女)

第5章 深度学习用于计算机视觉 本章包括以下内容&#xff1a; 理解卷积神经网络&#xff08;convnet&#xff09; 使用数据增强来降低过拟合 使用预训练的卷积神经网络进行特征提取 微调预训练的卷积神经网络 将卷积神经网络学到的内容及其如何做出分类决策可视化 本章将…

Android 性能优化总结:包体积优化

前言 随着开发不断迭代&#xff0c;App体积越来越大&#xff0c;包大小的增大也会给我们应用带来其他的影响 比如 下载率影响 过大的包体积会影响下载转化率&#xff0c;根据Google Play Store包体积和转化率分析报告显示&#xff0c;平均每增加1M&#xff0c;转化率下降0.2%左…

基于Java SSM框架实现大学生综合素质评分平台项目【项目源码+论文说明】

基于java的SSM框架实现大学生综合素质评分平台演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所…

C#调用SqlSugar操作达梦数据库报错“无效的表或视图名”

安装达梦数据库后&#xff0c;使用SqlSugar连接测试数据库并基于DBFirst方式创建数据库表对应的类&#xff0c;主要代码如下&#xff1a; SqlSugarClient db new SqlSugarClient(new ConnectionConfig(){DbType DbType.Dm,ConnectionString "Serverlocalhost; User Id…

【ArcGIS模型构建器】07:批量将多个xy坐标(Excel、txt、csv)转为点shp图层

不需要写Python批处理代码,本讲利用模型构建器,批量将xy坐标(Excel、txt、csv)转为点shp图层。 文章目录 一、问题分析二、解决办法三、模型构建1. 新建模型2. 添加文件夹3. 添加表迭代器4. 创建XY事件图层5. 复制要素6. 运行模型四、注意事项一、问题分析 现有多个excel、t…

qemu单步调试arm64 linux kernel

一、背景和目的 qemu搭建arm64 linux kernel环境-CSDN博客 之前介绍了qemu启动kernel的配置步骤和方法&#xff0c;现在开始我们的调试&#xff0c;这篇文章主要讲解如何单步调试内核&#xff0c;所有的实验还是基于ARM64&#xff1b; 二、环境准备 需要准备hostx86 target…

Python系列(9)—— 比较运算符

在Python中&#xff0c;比较运算符用于比较两个值的大小关系&#xff0c;如等于、不等于、大于、小于等。这些运算符可以帮助我们进行各种比较操作&#xff0c;并返回布尔值&#xff08;True或False&#xff09;。下面我们将详细介绍Python中的比较运算符。 等于运算符&#x…

容器化部署 Jenkins,并配置SSH远程操作服务器

目录 一、Jenkins是什么 二、常见的部署Jenkins的方法 三、为什么选择容器化部署 四、容器化部署Jenkins步骤 1、安装 Docker 2、获取 Jenkins 镜像 3、创建并运行容器 4、访问 Jenkins 4.1 查看初始密码问题 5、配置 Jenkins 5.1 安装插件 5.2 创建管理员用户 5.3…

一维数组的学习

前言 数组&#xff08;Array&#xff09;是有序的元素序列。若将有限个类型相同的变量的集合命名&#xff0c;那么这个名称为数组名。组成数组的各个变量称为数组的分量&#xff0c;也称为数组的元素&#xff0c;有时也称为下标变量。用于区分数组的各个元素的数字编号称…

Python之FastAPI框架~浅谈sqlalchemy与tortoise

1.前言 一直想理解清楚FastAPI框架的异步框架tortoise&#xff0c;据说这个框架使用起来能够更好地与FastAPI异步框架继承&#xff0c;但是FastAPI框架官方介绍的是sqlalchemy框架&#xff0c;它是同步的&#xff0c;是不支持await的。所以跟数据库进行交互时候&#xff0c;使…