golang——channel笔记
1.for i := range channel {
//...
}
相当于 循环进行 i<-channel,直至close(channel)
2.
· 给一个 nil channel 发送数据,造成永远阻塞
· 从一个 nil channel 接收数据,造成永远阻塞
· 给一个已经关闭的 channel 发送数据,引起 panic
· 从一个已经关闭的 channel 接收数据,立即返回一个零值
3.一个多线程同步的例子
import "fmt"
func push(c chan int, id string) {
for i := ; i < ; i++ {
c <- i
}
sync <- true
fmt.Println(id)
}
var sync chan bool
func main() {
sync = make(chan bool, )
ch := make(chan int, )
go push(ch, "A")
go push(ch, "B")
<-sync
<-sync
close(ch)//不关闭将导致deadlock
for j := range ch {
fmt.Println("parent:", j)
}
}
4.无缓存与有缓存channel:
func main() {
//ch = make(chan int, 1)//有缓冲
//ch = make(chan int)//无缓冲
select {
case <-ch:
print("A")
case ch <- :
print("B")//有缓冲输出B
default:
print("C")//无缓冲输出C
}
}
个人认为,无缓冲相当于有1个单位的缓冲这种说法欠佳,事实上无缓冲channel需要Read端和Write端均准备好才能发生RW操作,否则死锁;
但Read一个nil的有缓冲channel依然会死锁。
记住:channel是为通信而生的,你拿起电话不会是为了跟自己说话
golang——channel笔记的更多相关文章
- golang channel的使用以及调度原理
golang channel的使用以及调度原理 为了并发的goroutines之间的通讯,golang使用了管道channel. 可以通过一个goroutines向channel发送数据,然后从另一个 ...
- golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题
golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题 下面这个程序运行的能num结果是什么? package main import ( "fmt" " ...
- golang学习笔记19 用Golang实现以太坊代币转账
golang学习笔记19 用Golang实现以太坊代币转账 在以太坊区块链中,我们称代币为Token,是以太坊区块链中每个人都可以任意发行的数字资产.并且它必须是遵循erc20标准的,至于erc20标 ...
- golang学习笔记18 用go语言编写移动端sdk和app开发gomobile
golang学习笔记18 用go语言编写移动端sdk和app开发gomobile gomobile的使用-用go语言编写移动端sdk和app开发https://blog.csdn.net/u01249 ...
- golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍
golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍 go语言爬虫框架:gocolly/colly,goquery,colly,chrom ...
- golang学习笔记16 beego orm 数据库操作
golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...
- golang学习笔记14 golang substring 截取字符串
golang学习笔记14 golang substring 截取字符串golang 没有java那样的substring函数,但支持直接根据 index 截取字符串mystr := "hel ...
- golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换
golang学习笔记13 Golang 类型转换整理 go语言string.int.int64.float64.complex 互相转换 #string到intint,err:=strconv.Ato ...
- golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题
golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题 今天测试了重新建一个项目生成新的表,然后复制到旧的项目 ...
随机推荐
- C#随学随记
1.Microsoft.NET是基于Windows平台的一种技术(简称.NET),它包含了能在.NET Framework平台运行的所有语言..NET Framework是微软为开发应用程序创建的一个 ...
- awk改变了OFS,$0却没变化
一个文件1.txt,内容如下 a b c d e 目的把列变行,输出为: a b c d e 脚本如下: awk 'BEGIN{RS="";FS="\n";OF ...
- 解决”不按住fun键输入的是数字,按着fun键才能输入字母”
原来联想的“FN+NUMLK“键组合,是进行数字和字符区域的切换的. 如果当前输入的是数字,说明当前处于数字模式,按一次“FN+NUMLK“键组合即可切换到字母模式.这样就能够正常地输入字母了.
- 20145227&20145201 《信息安全系统设计基础》实验一 开发环境的熟悉
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名:李子璇 鄢曼君 学号:20145201 20145227 成绩: 指导教师:娄嘉鹏 实验日期:2016 ...
- Sprint第二个冲刺(第八天)
一.Sprint介绍 任务进度: 二.Sprint周期 看板: 燃尽图:
- python学习之while语句
while循环 1.简单的while循环while True: ")#这是一个简单的while循环,当等于True时会一直打印1 2.while执行多少次后退出 coun=0while Tr ...
- 使用exec命令删除前几天产生的日志
上次学习了访问某个网站并产生相应的日志保存在指定位置,但是时间长了,日志会占用磁盘大量的空间,下面使用exec这个命令删除之前的日志: 命令格式: find 目录绝对路径 -mtime +n(时间) ...
- Java-简陋的图书管理
本文代码为原创一个简陋的管理系统,只做功能的测试.并没有去完善所有应有的功能,只做了输入输出查找.仅供参考! 菜单部分: import java.util.Scanner; public class ...
- Python namedtuple
我们都知道Python中的tuple是一个非常高效的集合对象,但是我们只能通过索引的方式访问这个集合中的元素,比如下面的代码: Bob=('bob',30,'male') print'Represen ...
- kali linux安装virtualbox虚拟机之爬坑经历
很多kali爱好者想把kali linux作为系统使用,但是有些win下的程序有时候也需要用到,此时需要虚拟机. kali系统在安装虚拟机的时候也会遇到一大堆坑,接下来是我的爬坑过程. 一波三折. 环 ...