主要点:

1、管道类似队列:队满时,入队会导致阻塞,队空时出队也会阻塞;

不带缓冲的通道,进和出都会立刻阻塞。不带缓冲的管道类似ch:=make(chan data_type,N),其中不带缓冲区是指大小参数N=0,或省略,则为非缓冲管道,即管道容量为N=0。

2、go 关键字后面加一个函数,就可以创建一个线程(goroutine),函数可以为已经写好的函数,也可以是匿名函数。

 

二、管道和select配合:

golang的select类似c语言、java中的switch语句,但有明显的区别:

switch语句会【逐个】执行各个case分支,然后执行default分支,除非某个case包含break语句则退出switch;

而select会【随机】地执行下面的各个非阻塞的case 语句,且每个case 语句必须是一个读或写channel的操作;当某个case 阻塞时会走到下一个case,若该case不阻塞则执行该case后退出select,若所有的case都阻塞才会执行default 分支。

上述代码执行10次test_select()函数都是走到第3个case,若执行10次 test_select2(),则输出的结果会随机顺序执行第2、第3个case,因为它俩都不阻塞。