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笔记相关推荐

  1. golang学习笔记(基础篇)

    LCY~~Golang学习笔记 一.Go语言开发环境 ##安装Go开发包以及VsCode Go开发包与vscode配置安装教程网址:https://www.liwenzhou.com/posts/Go ...

  2. 118云原生编程语言Golang学习笔记

    Golang学习笔记 文章目录 1.Go简介 1.1 简介 1.2 设计初衷 1.3 Golang vs Java 1.4 应用领域 1.5 用go语言的公司 2.Go下载和安装 2.1 开发工具 2 ...

  3. golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题

    golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题 今天测试了重新建一个项目生成新的表,然后复制到旧的项目 ...

  4. Golang channel 快速入门

    文章目录 1.简介 2.缓冲 channel 3.range 和 close 操作 4.select 操作 5.注意要点 6.常见用法 参考文献 1.简介 channel 提供了一种通信机制,通过发送 ...

  5. golang学习笔记(五):数组的定义和使用

    golang 学习笔记 数组定义 数组是一系列相同数据类型在内存中有序存储的数据集合 var 数组名 [元素个数]数据类型//定义了10个整型变量的数组元素var arr [10]int//通过下标找 ...

  6. golang学习笔记(十六):多态的实现

    golang 学习笔记 多态实现 package main import "fmt"//先定义接口 在根据接口实现功能 type Humaner1 interface {//方法 ...

  7. golang学习笔记-1

    golang学习笔记-1 自学golang时,找到一篇学习资料http://golang.iswbm.com/en/latest/c01/c01_08.html 初看上面两种写法,不明就里,哪里高级了 ...

  8. Golang学习笔记之GORM基础使用(二)

    本文章主要学习GORM的增删查改.若还没有完成数据库和数据表的创建.定义模型以及数据库的连接请先学习本本专栏文章Golang学习笔记之GORM基础使用(一).本文为学习笔记,通过GORM官方中文文档和 ...

  9. golang学习笔记8 beego参数配置 打包linux命令

    golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架 https://beego.me/docs/mvc/contr ...

最新文章

  1. 2016-8-18晨型养成第三天
  2. 【Python】简单的apscheduler定时任务
  3. 用Python实现应用Last-Modified和ETag避免下载重复内容
  4. 转:多线程--六种多线程方法解决UI线程阻塞
  5. android jni示例,Android Jni代码示例讲解
  6. html动画转换为桌面动态壁纸,怎么设置电脑动态壁纸-动态桌面,这个功能太好玩了...
  7. 51单片机LCD1602程序详解
  8. 淘宝商品爬虫实战笔记
  9. nmap输出xml转换htm方法
  10. MinDoc安装指南(v0.12)
  11. 2022高淇Java300集完整版
  12. 数据库——数据库结构设计
  13. java--与君初相识
  14. WM_INITDIALOG与WM_CREATE消息的区别
  15. 【大数据】带你理解flink的state概念
  16. linux英伟达显卡驱动390下载,nvidia英伟达驱动|NVIDIA英伟达显卡驱动程序更新下载(32/64位) v384.90 Linux版 - 飞极下载站...
  17. 给我的电脑右键菜单添加{管理}菜单
  18. 端粒效应《The Telemere Effect》程序员的养生指南(一)压力、端粒与衰老
  19. BZOJ 4466 [Jsoi2013]超立方体【模拟
  20. linux用iso文件启动,直接从硬盘启动Linux ISO镜像

热门文章

  1. 90年代中国人一个月挣多少钱?一组数据带你看懂90年代消费情况
  2. 什么是数据、元数据、主数据?这可能是大多数人没看过的解释
  3. [翻译]Adobe Flash Player 11新特性
  4. mysql锁的一些理解简书_MySQL锁的基本概念
  5. Vue父子组件传递数据
  6. matlab gui怎样将结果保存_Processing将串行数据保存用作matlab数据分析
  7. linux串口环形缓冲区,能不能讲解下串口环形缓冲区的概念?
  8. 软件工程导论 01章软件工程学概述
  9. WinXP——如何重装XP系统
  10. 【已解决】罗技K380蓝牙键盘可以连接电脑,但无法输入怎么办?