1 回答

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個贊
os.File
維護(hù)下一個讀或?qū)懖僮鲗⒐ぷ鞯奈恢?。讀取/寫入文件會更新此位置。
如果您使用 single?file
,將其傳遞給getLastLine()
將讀取它直到其末尾,因此它的指針將指向文件的末尾。現(xiàn)在將其傳遞給readFileFrom()
將不會讀取和打印任何內(nèi)容,因?yàn)槲募┪仓鬀]有更多數(shù)據(jù)(這是“結(jié)束”的定義)。
您需要使用 倒回指針File.Seek()
,或者需要關(guān)閉并重新打開它。顯然,僅倒帶效率更高。要將指針設(shè)置為文件開頭:
if _, err := file.Seek(0, io.SeekStart); err != nil {
? ? panic(err)
}
因此,在兩個函數(shù)調(diào)用之間執(zhí)行此操作:
getLastLine(file)
if _, err := file.Seek(0, io.SeekStart); err != nil {
? ? panic(err)
}
readFileFrom(file)
另請注意,如果您打開文件兩次,則無需倒回它,并且您還可以同時運(yùn)行這兩個函數(shù)而不會相互干擾,因?yàn)樗鼈冎蛔x取文件并且每個函數(shù)都有自己的指針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 關(guān)注
- 112 瀏覽
添加回答
舉報