1.go并发常用的方法
并发分为两种,一种是数据共享,一种是将一个go的所有权交给另一个;
(1).如果是简单的map、slice这种并发,可以用简单地加锁解锁来解决;
(2).如果是简单的等所有goroutine协程都结束,可以用waitGroup
(3) 如果是比较复杂的goroutine协程编排,需要用channel
(4) 如果是和超时有关的,需要用channel和context
2.会导致panic
(1)close为nil的chan
(2)往已经close的chan里面send
(3)close已经close的chan
3.无缓冲和有缓冲
ch:=make(chan int) //无缓冲
ch:=make(chan int,2) //有缓冲
无缓冲时,发送会被阻塞,直到数据被接受;接收会被阻塞,直到督导数据;
有缓冲时,当缓冲满的时候,发送被阻塞;当缓冲空的时候,接收被阻塞;