1. nil channel 接收 接收goroutine阻塞
发送 发送个goroutine阻塞
2. 向无缓冲channel发送消息 接受队列有goroutine 接收端将收到消息
接收队列无goroutine 发送goroutine将阻塞
已有发送goroutine阻塞 发送goroutine将阻塞
3. 从无缓冲channel接收消息 无发送goroutine 接收端阻塞
有发送goroutine 收到消息
4. 向有缓冲channel发送消息 队列未满 正常发送
队列已满 发送端阻塞
5. 从有缓冲channel接收消息 队列中有消息 正常接收
队列中无消息 接收端阻塞
6. 对close channel的操作 向closed channel发送 panic...
三个goroutine分别输出张三、李四、王五,使其按上述顺序输出5遍。 package main import ( "fmt" "sync" ) var w sync.WaitGroup func main() { w.Add(15) chan1 := make(chan struct{}, 0) chan2 := make(chan struct{}, 0) for i := 0; i < 5; i++ { go func() { defer w.Done() fmt.Println("张三") chan1 <- struct{}{} }() go func() { defer w.Done() <- chan1 fmt.Println("李四") chan2 <- struct{}{} }() go func() { defer w.Done() <- chan2 fmt.Println("王五") }() } w.Wait() } 编写程序输出某目录下的所有文件(包括子目录) package main import ( "fmt" "io/ioutil" "os" ) func main() { dir := os....