【Go】Reader的使用注意,阻塞和关闭

本身由使用bufio.NewReader(os.Stdin)的经历而来。

由于io.Reader的读取是阻塞的,所以异步使用的时候,goroutine有可能会卡在对其进行Read操作的地方,因而要注意泄漏问题。

因为io.Reader这个接口本身是没有关闭方法的,所以在使用io.Reader的时候大致有几个特定的思路。

  1. 对于os.Stdin这类公用输入端,不要重复创建Reader并尝试读取,尽量从单一Reader读取需要的内容,避免重复创建Reader并导致读取的相互干扰。
  2. 对于一般Reader,比如读文件之类的,可以使用原结构的Close方法进行关闭,来避免goroutine的阻塞和泄漏。
  3. 逻辑上尽量避免阻塞,快速完成Read操作,达到Read操作的结束条件,比如io.EOF。

你可能感兴趣的:(go)