首頁 > 後端開發 > Golang > 為什麼寫入同一個 Go 檔案指標後讀取沒有任何回傳?

為什麼寫入同一個 Go 檔案指標後讀取沒有任何回傳?

Mary-Kate Olsen
發布: 2024-12-13 03:56:09
原創
659 人瀏覽過

Why Does Reading After Writing to the Same Go File Pointer Return Nothing?

在 Go 中讀取和寫入相同檔案

在 Go 中,使用 os.File 類型使檔案操作變得簡單。但是,嘗試讀取和寫入相同文件指標時可能會出現問題。本文針對這種情況並提供了解決方案。

問題:

您正在嘗試將資料寫入文件,然後從同一文件中讀回它指針。但是,讀取操作不會傳回任何內容。

代碼:

func main() {
    filename := "test.txt"
    f, _ := os.OpenFile(filename, os.O_CREATE|os.O_TRUNC|os.O_RDWR, os.ModePerm)
    defer os.Remove(filename)

    // Write 10 times
    for i := 0; i < 10; i++ {
        fmt.Fprintf(f, "test%d\n", i)
    }

    // Read 10 times
    r := bufio.NewReader(f)
    for i := 0; i < 10; i++ {
        str, _, err := r.ReadLine()
        if err != nil {
            if err == io.EOF {
                fmt.Println("Done")
                return
            }
            fmt.Println("Error", err)
        }
        fmt.Println("Read", string(str))
    }
}
登入後複製

問題:

在提供的程式碼中,寫入操作後,檔案指針移至文件末尾。當嘗試讀取操作時,它會立即遇到文件末尾,從而導致 io.EOF 錯誤。

解決方案:

要解決此問題,您在讀取之前必須手動將檔案指標找到回開頭。

_, err := f.Seek(0, 0)
if err != nil {
    fmt.Println("Error", err)
}
登入後複製

此程式碼片段在讀取之前新增了一個 Seek 操作 環形。它將檔案指標設定為檔案的開頭,允許後續的讀取操作檢索寫入的資料。

以上是為什麼寫入同一個 Go 檔案指標後讀取沒有任何回傳?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板