golang——channel笔记
1.for i := range channel {
//...
}
相当于 循环进行 i<-channel,直至close(channel)
2.
· 给一个 nil channel 发送数据,造成永远阻塞
· 从一个 nil channel 接收数据,造成永远阻塞
· 给一个已经关闭的 channel 发送数据,引起 panic
· 从一个已经关闭的 channel 接收数据,立即返回一个零值
3.一个多线程同步的例子
1 import "fmt" 2 3 func push(c chan int, id string) { 4 for i := 0; i < 10; i++ { 5 c <- i 6 } 7 sync <- true 8 fmt.Println(id) 9 } 10 11 var sync chan bool 12 13 func main() { 14 sync = make(chan bool, 1) 15 ch := make(chan int, 20) 16 go push(ch, "A") 17 go push(ch, "B") 18 <-sync 19 <-sync 20 close(ch)//不关闭将导致deadlock 21 for j := range ch { 22 fmt.Println("parent:", j) 23 } 24 }
4.无缓存与有缓存channel:
1 func main() { 2 //ch = make(chan int, 1)//有缓冲 3 //ch = make(chan int)//无缓冲 4 select { 5 case <-ch: 6 print("A") 7 case ch <- 1: 8 print("B")//有缓冲输出B 9 default: 10 print("C")//无缓冲输出C 11 } 12 }
个人认为,无缓冲相当于有1个单位的缓冲这种说法欠佳,事实上无缓冲channel需要Read端和Write端均准备好才能发生RW操作,否则死锁;
但Read一个nil的有缓冲channel依然会死锁。
记住:channel是为通信而生的,你拿起电话不会是为了跟自己说话
转载于:https://www.cnblogs.com/lyuavery/p/5286801.html
golang——channel笔记相关推荐
- golang学习笔记(基础篇)
LCY~~Golang学习笔记 一.Go语言开发环境 ##安装Go开发包以及VsCode Go开发包与vscode配置安装教程网址:https://www.liwenzhou.com/posts/Go ...
- 118云原生编程语言Golang学习笔记
Golang学习笔记 文章目录 1.Go简介 1.1 简介 1.2 设计初衷 1.3 Golang vs Java 1.4 应用领域 1.5 用go语言的公司 2.Go下载和安装 2.1 开发工具 2 ...
- golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题
golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题 今天测试了重新建一个项目生成新的表,然后复制到旧的项目 ...
- Golang channel 快速入门
文章目录 1.简介 2.缓冲 channel 3.range 和 close 操作 4.select 操作 5.注意要点 6.常见用法 参考文献 1.简介 channel 提供了一种通信机制,通过发送 ...
- golang学习笔记(五):数组的定义和使用
golang 学习笔记 数组定义 数组是一系列相同数据类型在内存中有序存储的数据集合 var 数组名 [元素个数]数据类型//定义了10个整型变量的数组元素var arr [10]int//通过下标找 ...
- golang学习笔记(十六):多态的实现
golang 学习笔记 多态实现 package main import "fmt"//先定义接口 在根据接口实现功能 type Humaner1 interface {//方法 ...
- golang学习笔记-1
golang学习笔记-1 自学golang时,找到一篇学习资料http://golang.iswbm.com/en/latest/c01/c01_08.html 初看上面两种写法,不明就里,哪里高级了 ...
- Golang学习笔记之GORM基础使用(二)
本文章主要学习GORM的增删查改.若还没有完成数据库和数据表的创建.定义模型以及数据库的连接请先学习本本专栏文章Golang学习笔记之GORM基础使用(一).本文为学习笔记,通过GORM官方中文文档和 ...
- golang学习笔记8 beego参数配置 打包linux命令
golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架 https://beego.me/docs/mvc/contr ...
最新文章
- 2016-8-18晨型养成第三天
- 【Python】简单的apscheduler定时任务
- 用Python实现应用Last-Modified和ETag避免下载重复内容
- 转:多线程--六种多线程方法解决UI线程阻塞
- android jni示例,Android Jni代码示例讲解
- html动画转换为桌面动态壁纸,怎么设置电脑动态壁纸-动态桌面,这个功能太好玩了...
- 51单片机LCD1602程序详解
- 淘宝商品爬虫实战笔记
- nmap输出xml转换htm方法
- MinDoc安装指南(v0.12)
- 2022高淇Java300集完整版
- 数据库——数据库结构设计
- java--与君初相识
- WM_INITDIALOG与WM_CREATE消息的区别
- 【大数据】带你理解flink的state概念
- linux英伟达显卡驱动390下载,nvidia英伟达驱动|NVIDIA英伟达显卡驱动程序更新下载(32/64位) v384.90 Linux版 - 飞极下载站...
- 给我的电脑右键菜单添加{管理}菜单
- 端粒效应《The Telemere Effect》程序员的养生指南(一)压力、端粒与衰老
- BZOJ 4466 [Jsoi2013]超立方体【模拟
- linux用iso文件启动,直接从硬盘启动Linux ISO镜像
热门文章
- 90年代中国人一个月挣多少钱?一组数据带你看懂90年代消费情况
- 什么是数据、元数据、主数据?这可能是大多数人没看过的解释
- [翻译]Adobe Flash Player 11新特性
- mysql锁的一些理解简书_MySQL锁的基本概念
- Vue父子组件传递数据
- matlab gui怎样将结果保存_Processing将串行数据保存用作matlab数据分析
- linux串口环形缓冲区,能不能讲解下串口环形缓冲区的概念?
- 软件工程导论 01章软件工程学概述
- WinXP——如何重装XP系统
- 【已解决】罗技K380蓝牙键盘可以连接电脑,但无法输入怎么办?