go的通道用于goroutine之间的通信与数据同步,是go中比较重要的类型之一
nil通道:
未使用make进行初始化的chan默认值为nil,读取/写入nil通道会永久阻塞当前协程,关闭nil通道会panic
无缓冲通道:
使用make初始化通道时未指定数量则为无缓冲通道,必须读写双方同时操作才不会阻塞,有读无写时,读将阻塞,有写无读时,写将阻塞
有缓冲通道:
使用make初始化通道时指定数量则为有缓冲通道,当缓冲区未满时,写入将不会阻塞,否则阻塞;当缓冲区有数据时,读取不会阻塞,否则阻塞
已关闭通道:
使用close(ch)关闭通道后,读取该通道将立即返回该通道类型的零值,写入已关闭的通道将会panic
在使用通道时,应注意操作通道时阻塞造成的协程无法退出问题,从而导致内存泄漏