这个是ioutil暴露的方法
func ReadAll(r io.Reader) ([]byte, error) {
return readAll(r, bytes.MinRead)
}
func readAll(r io.Reader, capacity int64) (b []byte, err error) {
buf := bytes.NewBuffer(make([]byte, 0, capacity)) //创建一个缓冲的buf
defer func() {
e := recover()//读取错误
if e == nil {
return//没有错误退出defer函数
}
if panicErr, ok := e.(error); ok && panicErr == bytes.ErrTooLarge {
err = panicErr
} else {
panic(e)
}
}()
_, err = buf.ReadFrom(r) //调用方法
return buf.Bytes(), err
}
func ReadFile(filename string) ([]byte, error) {
f, err := os.Open(filename)//打开文件
if err != nil {
return nil, err
}
defer f.Close()
var n int64
if fi, err := f.Stat(); err == nil {
// 读取他的文件大小另外不能让他太大
if size := fi.Size(); size < 1e9 {
n = size
}
}
return readAll(f, n+bytes.MinRead)//调用方法
}