ZBLOG

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() content, err := ioutil.R...

如果你想使用更灵活的方式替代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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=12533

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?