如果你想使用更灵活的方式替代ioutil.ReadAll(),你可以使用io.ReadFull()来替代,如下所示:
import (
"os"
"io"
)
func findFileContent(filename string) ([]byte, error) {
filePath := "/Users/tangxuxin/GolandProjects/exetice_project" + filename
file, err := os.Open(filePath)
if err != nil {
return nil, err
}
defer file.Close()
var content []byte
buffer := make([]byte, 4096) // 指定一个合适的缓冲区大小
for {
n, err := io.ReadFull(file, buffer)
content = append(content, buffer[:n]...)
if err == io.EOF {
break
} else if err != nil && err != io.ErrUnexpectedEOF {
return nil, err
}
}
return content, nil
}
在这个改进后的代码中,我们首先创建一个足够大的缓冲区 buffer ,然后循环调用 io.ReadFull() 来读取文件内容,并将每次读取到的数据追加到 content 变量中。当读取到文件末尾时(即 err == io.EOF),循环结束。
需要注意的是,在上述代码中,我们排除了 io.ErrUnexpectedEOF 的情况。因为这个错误表示文件在读取期间遇到意外的EOF,可能是因为文件被截断或其他原因导致无法完整读取。
内容由零声教学AI助手提供,问题来源于学员提问




