[勘误]反馈一个第一章第一节的错误

#99 · closed · 2 comments

View on GitHub ↗

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 不阻塞了。 **图片** ![image](https://user-images.githubusercontent.com/36259784/134675990-29eade1e-0ff0-45e5-8b03-42c40fe0dd0e.png) **其他补充信息** (无)

Comments

RainbowMango

> select的case语句读管道不会阻塞,尽管管道中没有数据 这里所说的不阻塞是指`case语句中读管道`不会阻塞,而不是说`select`语句。

FishGoddess

> > select的case语句读管道不会阻塞,尽管管道中没有数据 > > 这里所说的不阻塞是指`case语句中读管道`不会阻塞,而不是说`select`语句。 噢噢,明白了 感谢回复!