第3单元 构建块
使用自定义类型;
一个方法必须并且只能有一个接受者;
调用方法需要用到点记号;
将函数赋值给变量;将函数传递给其它函数;闭包和匿名函数;
第4单元 收集器
切片与映射(索引数组与关联数组)
第5单元 状态与行为
结构:对象{}
go既不支持类和对象,也不支持继承,通过结构和方法实现面向对象设计的相关概念;
go的构造函数只是普通函数;
通过结构,通过嵌入的语言特性,实现组合与转发(复用);
接口;
第6单元 深入go语言
指针&与*(引用传值);
指针的类型声明前面都带有星号,如*int;
指针与结构或者数组搭配时最有用;
映射和切片会隐式的使用指针;
内部指针可以无须将字段声明为指针的清空下指向结构中的字段;
合理使用指针,而不是过度使用;
防范nil;
错误处理:defer;
自定义错误类型;
panic(‘i forgot my tower’)更好些;
os.Exit;
第7单元 并发编程
使用goroutine并发执行任何代码,并使用通道实现多个并发任务能够直截了当朝着同一个目标前进;
启动goroutine:go sleepyGoper();
goroutine与通道的结合使用,如上图;
使用select处理多个通道;
阻塞和思索:死锁在理论上很难杜绝,但是遵循一些简单的规则,可以避免死锁;
使用go语言可以启动一个新的goroutine,并且这个goroutine以并发方式运行;
通道用于在多个goroutine之间传递值;
创建通道使用make函数 make(chan string);
close函数可以关闭一个通道;
range语句可以从通道中读取所有值,直到通道关闭为止;
除非另有声明,永远不要在同一时间使用多个goroutine访问相同的状态;
使用互斥锁可以确保在同一个时间内,只能有一个goroutine访问指定的状态;
将加锁之后要做的工作减至最少;
使用长时间运行的goroutine可以实现带有select循环的工作进程。