package main

/*
Channel Channel 是 goroutine 沟通的桥梁, goroutine是通过通信来进行内存的共享,
而不是通过内存的共享来进行通信,通过Channel通道来共享内存,
通过通道的通信(写进去在读出来)进行数据的传递,大都是阻塞同步的
通过 make 创建,close 关闭
Channel 是引用类型
可以使用 for range 来迭代不断操作 channel
可以设置单向(只读或者只写)或双向通道(读写)
可以设置缓存大小,不设置就是0是阻塞的,在未被填满前不会发生阻塞,
有缓存是异步的无缓存是同步的, Select 可处理一个或多个 channel 的发送与接收
同时有多个可用的 channel时按随机顺序处理
可用空的 select 来阻塞 main 函数
*/
import (
"fmt"
) func main1() {
c := make(chan int)
go func() { //不断从c读值
for v := range c {
fmt.Println(v)
}
}() for {
select { //随机向c中写0或者1
case c <- :
case c <- :
}
} } func main() {
c := make(chan int)
go func() { //不断从c读值
for v := range c {
fmt.Println(v)
}
}() for {
select {} //空的select,没有发送和接收,完全阻塞main函数,
} } /*
c1: 1
c2: c2
c1: 3
c2: c22
*/

最新文章

  1. GNU/Linux下LVM配置管理以及快照卷、物理卷、卷组、逻辑卷的创建和删除
  2. spring MVC原理
  3. XMPP客户端开发(1)--连接和登录
  4. UVa 11988 Broken Keyboard(链表-&gt;数组实现)
  5. 从客户端(&amp;)中检测到有潜在危险的 Request.Path 值解决方案
  6. C# 类与接口的几个问题的总结(待续)
  7. MongoDB - Introduction to MongoDB, Capped Collections
  8. 剑指Offer:从第一个字符串中删除第二个字符串中出现过的所有字符
  9. linux中shell变量$#,$@,$0,$1,$2的含义解释
  10. Android中ViewStub组件使用
  11. Spring笔记 - Bean xml装配
  12. JSP的学习(2)——语法知识一
  13. leetcode[85] Maximal Rectangle
  14. vue+mint-ui的微博页面(支持评论@添加表情等)
  15. 【shell脚本练习】批量添加用户和设置密码
  16. Java 控制结构与方法
  17. __name__的意义与作用
  18. System V 与 POSIX 简介与对比
  19. oracle的!=与&lt;&gt;
  20. 蓝桥杯 方格填数 DFS 全排列 next_permutation用法

热门文章

  1. 聚类和EM算法——K均值聚类
  2. jquery.guide.js 新手指引
  3. 一次偶遇 IOException
  4. vue中的表单验证
  5. Eclipse调试相关
  6. mysqldump快速导数据
  7. mysql ab主从复制出错及解决过程
  8. ZOJ 1298_Domino Effect
  9. Redis持久化方式--RDB和AOF
  10. Java高级教程:Java并发性和多线程