一旦主gorountine 中的代码执行完毕 当前的go程序就会结束运行
那么在go程序结束的那一刻 还有gorountine 未得到运行机会 它们就没有运行机会了 它们中的代码也不会被执行了
go语言不会去保证这些 gorountine 会以怎样的顺序运行 哪个gorountine 先执行完 哪个gorountine 后执行完 往往是不可预知的 除非我们使用了某种go语言提供的方式进行了人为干预
曾因酒醉鞭名马 生怕情多累美人
一旦主gorountine 中的代码执行完毕 当前的go程序就会结束运行
那么在go程序结束的那一刻 还有gorountine 未得到运行机会 它们就没有运行机会了 它们中的代码也不会被执行了
go语言不会去保证这些 gorountine 会以怎样的顺序运行 哪个gorountine 先执行完 哪个gorountine 后执行完 往往是不可预知的 除非我们使用了某种go语言提供的方式进行了人为干预
通道(channel)完全可以与 goroutine(也可称go 程)并驾齐驱,共同代表go语言独有的并发编程模式和编程哲学
通道类型的值本身就是并发安全的
发送接收都是互斥
发送和接收操作中对元素值的处理 都是不可分割的
发送操作在完全完成之前会被阻塞,接收操作也是如此
map
键值对
字典类型本质上是一个哈希表的特定实现,在这个实现当中,键和元素的最大不同在于,键的类型是受限制的,元素的类型却可以是任意类型的
哈希表中比较重要的一个过程 就是映射
键可以理解为元素的一个索引,在哈希表中通过键查找与它成对的那个元素
这种对应关系,在数学里就被称为映射 也是map这个词的本意
哈希表的映射过程就存在于对键–元素的增、删、改、查的操作之中
映射的第一步 就是把键值转换为哈希值
键值的类型 不可以是函数类型、字典类型和切片类型
键的值之间支持判等的操作
另外 键的类型是揭接口类型的,那么键值的实际类型也不能是上述的三种类型,否则在程序运行过程当中会引发panic
键的类型 优先选用数值类型和指针类型,类型的宽度越小越好
字符串类型的话 对键值的长度进行额外的约束
字典是引用的类型 声明而不初始化 值是nil
除了添加键–元素对,在一个值为nil的字典上做任何操作都不会引起错误
试图在一个值为nil的字典中添加键–元素对的时候,运行时系统会抛出一个panic
函数是第一等公民
函数不仅可以封装代码、分割功能、解耦逻辑
还可以化身普通的值 在其他函数之间传递、赋予变量、做类型判断和转换等等
就像切片和字典的值一样
函数值可以由此成为能够被随意传播的独立逻辑组件(或者说功能模块)