FishGoddess
**问题描述** 第一章 1.1 节的 `4.2 select` 中提到 select 对于读是不阻塞的,以下是原文: ``` 通过这个示例想说的是:select的case语句读channel不会阻塞,尽管channel中没有数据。这是由于case语句编译后调用读channel时会明确传入不阻塞的参数,此时读不到数据时不会将当前goroutine加入到等待队列,而是直接返回。 ``` 但示例中的 select 不阻塞其实是因为加了 default 吧,如果不加 default 的话还是会阻塞的,参考如下代码: ```go ch := make(chan int, 10) go func() { time.Sleep(time.Second) ch <- 1 }() select { case n := <-ch: fmt.Println("ch read:", n) } fmt.Println("select read...") ``` **如何找到这个错误** - 章节:第一章:常见数据结构实现原理 - 页码:[1.1 节](https://books.studygolang.com/GoExpertProgramming/chapter01/1.1-chan.html) **您认为应该如何?** select 不加 default 的话,读 channel 是会阻塞的,加了 default,就走 default 不阻塞了。 **图片**  **其他补充信息** (无)