ioutil一些方便的操作函数集

1. NopCloser函数

  该函数是将一个io.Reader接口包装成一个io.ReadCloser接口,其中包装生成的Close方法什么也不操作。可以在需要将io.Reader传入io.ReadCloser参数的函数的情况下使用。

1
2
3
4
5
6
7
type nopCloser struct {
io.Reader
}

func(nopCloser) Close() error {
return nil
}

2. ReadAll函数

  很多时候,我们需要一次性读取 io.Reader 中的数据,通过上一节的讲解,我们知道有很多种实现方式。考虑到读取所有数据的需求比较多,Go 提供了 ReadAll 这个函数,用来从io.Reader 中一次读取所有数据。

1
func ReadAll(r io.Reader) ([]byte, error)

  阅读该函数的源码发现,它是通过 bytes.Buffer 中的 ReadFrom 来实现读取所有数据的。该函数成功调用后会返回 err == nil 而不是 err == EOF。(成功读取完毕应该为 err == io.EOF,这里返回 nil 由于该函数成功期望 err == io.EOF,符合无错误不处理的理念)

参考文章:
参考链接