go语言发芽史
先解决有和无得问题,再进一步迭代。
基础中的战斗机
x,ok := m["b"]//这种即是所谓的ok-idiom模式,是指在多返回值中用一个ok的布尔值来表示操作是否成功
管道的基本用法
// 声明方式,在此ElemType是指此管道所传递的类型
2 var chanName chan ElemType
3 // 声明一个传递类型为int的管道
4 var ch chan int
5 // 声明一个map,元素是bool型的channel
6 var m map[string] chan bool
7
8 // 定义语法,定义需要使用内置函数make()即可,下面这行代码是声明+定义一个整型管道
9 ch := make(chan int)
10 // 事先定义好管道的size,下面这行代码定义管道的size为100
11 ch := make(chan int, 100)
12
13 // 由管道中读写数据,<-操作符是与最左边的chan优先结合的
14 // 向管道中写入一个数据,在此需要注意:向管道中写入数据通常会导致程序阻塞,直到有
15 // 其他goroutine从这个管道中读取数据
16 ch<- value
17 // 读取数据,注意:如果管道中没有数据,那么从管道中读取数据会导致程序阻塞,直到有数据
18 value := <-ch
19
20 // 单向管道
21 var ch1 chan<- float64 // 只能向里面写入float64的数据,不能读取
22 var ch2 <-chan int // 只能读取int型数据
23
24 // 关闭channel,直接调用close()即可
25 close(ch)
26 // 判断ch是否关闭,判断ok的值,如果是false,则说明已经关闭(关闭的话读取是不会阻塞的)
27 x, ok := <-ch
事先需要制定通道大小,如c := make(chan int, 3)//创建带三个缓冲槽的一步通道,如果缓冲区未满则不会阻塞