1 回答

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