乐趣区

关于go:GoReader的使用注意阻塞和关闭

自身由应用 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。
退出移动版