注:1)以下的所有讨论建立在包含整形元素的通道类型之上,即 chan int

  2)对于“<-”我的理解是,它可能是一个操作符(接收操作符),也

     可能是类型的一部分(如“chan<- int”表示包含整形元素的发送通道类型)

带缓冲和不带缓存的channel

1.带缓冲:ch:=make(chan int,1)

  1)goruntine A 中包含语句 ch<-1:表示向ch发送1,若此时ch中已经有一个数据,则A阻塞在此处,直到ch中的数据被取走;

  2)goruntine A 中包含语句  <-ch:表示从ch中接收一个数据,若此时ch中无数据,则A阻塞在此处,直到有数据传入ch;  

  3)假设ch:=make(chan int,100),for i := range ch {...}。通过range 在遍历 ch 的时候需要注意:

      a. range循环接收ch,直到close(ch),如果没有数据,将阻塞在此处。
      b. 当close(ch)运行后,不可向ch发送数据,但仍然可以接收ch剩余数据,直到ch中数据为空,这时range语句将结束而非阻塞。
  

2.不带缓冲:ch:=make(chan int),此时的ch只作数据传递的作用,不能存储数据(因为它没buffer)。

  1)goruntine A 包含 ch<-1:运行到此处A立即阻塞,除非另一个goruntine B 正在执行 ch<-

    换个说法:A欲向ch发送数据,仅当B做好了从ch接收数据的准备;

  2)同理,goruntine A 包含 <-ch。A欲从ch接收一个数据,仅当B做好了向ch发送数据的准备。

  

类型转换:一定注意chan int是一个整体

   <-chan int(v):将v转换为一个通道类型,再从该通道接收一个值(此时“<-”是一个操作符)

  (<-chan int)(v):将v转换为一个接收通道类型(此时“<-”是类型的一部分)

go:channel(未完)的更多相关文章

  1. 从Socket入门到BIO,PIO,NIO,multiplexing,AIO(未完待续)

    Socket入门 最简单的Server端读取Client端内容的demo public class Server { public static void main(String [] args) t ...

  2. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  3. javascript有用小功能总结(未完待续)

    1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...

  4. ASP.NET MVC 系列随笔汇总[未完待续……]

    ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...

  5. 关于DOM的一些总结(未完待续......)

    DOM 实例1:购物车实例(数量,小计和总计的变化) 这里主要是如何获取页面元素的节点: document.getElementById("...") cocument.query ...

  6. 我的SQL总结---未完待续

    我的SQL总结---未完待续 版权声明:本文为博主原创文章,未经博主允许不得转载. 总结: 主要的SQL 语句: 数据操作(select, insert, delete, update) 访问控制(g ...

  7. virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)

    virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续) 第一次接触到 linux,不知道linux的确很强大,然后用virtualbox ...

  8. MVC丶 (未完待续······)

         希望你看了此小随 可以实现自己的MVC框架     也祝所有的程序员身体健康一切安好                                                     ...

  9. 一篇文章让Oracle程序猿学会MySql【未完待续】

    一篇文章让Oracle DB学会MySql[未完待续] 随笔前言: 本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方 ...

  10. [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續)

    [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續) a10036it 发表于 2015-7-27 21:11:19 https://www.itsk.com/t ...

随机推荐

  1. virtualenv 安装使用

      不同的人喜欢用不同的方式建立各自的开发环境,但在几乎所有的编程社区,总有一个(或一个以上)开发环境让人更容易接受. 使用不同的开发环境虽然没有什么错误,但有些环境设置更容易进行便利的测试,并做一些 ...

  2. iOS中富文本NSMutableAttributedString的用法

    NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc]initWithString:@"我是富文 ...

  3. sql查询,不在某一范围问题的新思路

    新思路: A为学生表 B为中间表(学生和课程的) C为课程表 新的思路是用left join,(right join应该也可以) 查询没有选课的学生 ... C left join B on A.si ...

  4. git: 修改commiter 信息

    Committer: root root@localhost.localdomain 您的姓名和邮件地址基于登录名和主机名进行了自动设置.请检查它们正确 与否.您可以通过下面的命令对其进行明确地设置以 ...

  5. 学习php一个星期

    学习这事都是被逼出来的,总监让我做一个邮箱系统,目测可以.

  6. JestClient

    JestService.java [html] view plain copy 在CODE上查看代码片派生到我的代码片 public class JestService { /** * 获取JestC ...

  7. laydate兼容bootstrap

    因为Bootstrap使用了 * {box-sizing:border-box;}来reset浏览器的默认盒子模型.所以加上以下代码就可以兼容Bootstrap了 <style type=&qu ...

  8. DEDEcms 在php5.4以上 后台登录空白解决办法

    本次环境php5.5 首先确定 dede data文件夹已经有写入权限 775 777都可以 然后再远程桌面或者FTP修改 include/userlogin.class.php 文件 注释掉下面六句 ...

  9. throttle和debounce简单实现

    function debounce(delay,fn){ var timer; return function(){ var ctx = this,args = arguments; clearTim ...

  10. [c#基础]关于try...catch最常见的笔试题

    引言 在翻看之前总结的常见面试题中,关于try...catch异常处理的还是蛮多了,今天看到这个面试题,也就重新学习一下. try..catch语法 try-catch语句由一个try块后跟一个或多个 ...