- 尽量通过通信来共享内存
- switch不需要用break来退出case,要紧跟下一个case用fallthrough
- defer close()要用在错误判断之后,不然获取连接时出错了,调用close()的对象就是空的,就会报错
- channnel关闭后,还可以获取到值,值为0
- 要让关闭后的channel阻塞,把关闭了channnel置为nil
- goto语句和标签之间不能定义新的标签
- golang自带时区信息文件
$GOROOT/lib/time/zoneinfo.zip
- 同一个包,里面有个变量,在main包里面用的长路径导入,然后为这个变量赋值,在另一个变量里用的短路径导入包,并使用它,就会出现空指针。这两个路径属于不同的gopath,应该是go在编译的时候,把它们看做不同的包了。
- time.After()会在使用时才建立一个timer,不适合在循环中使用它。
尽量通过通信来共享内存
发送一个数据到Channel 和 从Channel接收一个数据 都是 原子性
的。
Go的哲学之一就是:不要通过共享内存来通信,而要通过通信来共享内存
,前者就是传统的加锁
,后者就是Channel
。也就是说,设计Channel的主要目的就是在多任务间传递数据的,这当然是安全的。