本身由使用bufio.NewReader(os.Stdin)
的经历而来。
由于io.Reader的读取是阻塞的,所以异步使用的时候,goroutine有可能会卡在对其进行Read操作的地方,因而要注意泄漏问题。
因为io.Reader这个接口本身是没有关闭方法的,所以在使用io.Reader的时候大致有几个特定的思路。
- 对于os.Stdin这类公用输入端,不要重复创建Reader并尝试读取,尽量从单一Reader读取需要的内容,避免重复创建Reader并导致读取的相互干扰。
- 对于一般Reader,比如读文件之类的,可以使用原结构的Close方法进行关闭,来避免goroutine的阻塞和泄漏。
- 逻辑上尽量避免阻塞,快速完成Read操作,达到Read操作的结束条件,比如io.EOF。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。