第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

文件掃描器循環(huán)不執(zhí)行

文件掃描器循環(huán)不執(zhí)行

Go
收到一只叮咚 2023-08-07 14:42:06
我正在獲取文本文件的最后一行,并嘗試讀取它。獲取最后一行:func getLastLine(file *os.File) (result int) {    s := bufio.NewScanner(file)    result = 0    for s.Scan() {        result++    }    err := s.Err()    if err != nil {        log.Fatal(err)    }    return}讀取文件:func readFileFrom(file *os.File) {    s := bufio.NewScanner(file)    for s.Scan() {        fmt.Println(s.Text())    }    err := s.Err()    if err != nil {        log.Fatal(err)    }}如果我把這個寫在main.go:    getLastLine(file)    readFileFrom(file)它不會執(zhí)行該塊:for s.Scan() {    fmt.Println(s.Text())}如果我刪除該行g(shù)etLastLine(file),則讀取將按預(yù)期進(jìn)行。我認(rèn)為這是因?yàn)?2 個掃描儀正在訪問同一個文件。
查看完整描述

1 回答

?
慕碼人2483693

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


查看完整回答
反對 回復(fù) 2023-08-07
  • 1 回答
  • 0 關(guān)注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號