1.new与make的区别

new 仅分配空间,返回指针,

make 分配空间后,会进行初始化,返回type类型值,仅用于slice,channel,map

2.golang的锁

互斥锁(Mutex)

用于提供一种加锁机制(Locking Mechanism),保证同一时刻只有一个goroutine在临界区运行。

读写锁(RWMutex)

就是写的时候不允许读和多个写,读的时候不允许写但是允许多个读,读和写不能同时进行

Lock方法将rw锁定为写入状态,禁止其他线程读取或者写入。

Unlock方法解除rw的写入锁状态,如果m未加写入锁会导致运行时错误。

RLock方法将rw锁定为读取状态,禁止其他线程写入,但不禁止读取。

RUnlock方法解除rw的读取锁状态,如果m未加读取锁会导致运行时错误。

3.select 随机性

select会随机选择一个可用通道做收发操作。所以代码是有肯触发异常,也有可能不会。单个chan如果无缓冲时,将会阻塞。但结合 select可以在多个chan间等待执行。有三点原则:

select 中只要有一个case能return,则立刻执行。 *

当如果同一时间有多个case均能return则伪随机方式抽取任意一个执行。