第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循环的工作进程。