1 回答

TA貢獻1860條經驗 獲得超9個贊
os.File
維護下一個讀或寫操作將工作的位置。讀取/寫入文件會更新此位置。
如果您使用 single?file
,將其傳遞給getLastLine()
將讀取它直到其末尾,因此它的指針將指向文件的末尾?,F在將其傳遞給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 關注
- 114 瀏覽
添加回答
舉報