1 回答
TA贡献1860条经验 获得超9个赞
os.File
维护下一个读或写操作将工作的位置。读取/写入文件会更新此位置。
如果您使用 single file
,将其传递给getLastLine()
将读取它直到其末尾,因此它的指针将指向文件的末尾。现在将其传递给readFileFrom()
将不会读取和打印任何内容,因为文件末尾之后没有更多数据(这是“结束”的定义)。
您需要使用 倒回指针File.Seek()
,或者需要关闭并重新打开它。显然,仅倒带效率更高。要将指针设置为文件开头:
if _, err := file.Seek(0, io.SeekStart); err != nil {
panic(err)
}
因此,在两个函数调用之间执行此操作:
getLastLine(file)
if _, err := file.Seek(0, io.SeekStart); err != nil {
panic(err)
}
readFileFrom(file)
另请注意,如果您打开文件两次,则无需倒回它,并且您还可以同时运行这两个函数而不会相互干扰,因为它们只读取文件并且每个函数都有自己的指针os.File。
file1, err := os.Open("a.txt")
// handle err
defer file1.Close()
file2, err := os.Open("a.txt")
// handle err
defer file2.Close()
wg := sync.WaitGroup()
wg.Add(1)
go func() {
defer wg.Done()
getLastLine(file1)
}()
readFileFrom(file2)
wg.Wait() // Wait for getLastLine() to complete
- 1 回答
- 0 关注
- 75 浏览
添加回答
举报