Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengelakkan `io.EOF` Apabila Membaca Selepas Menulis ke `os.File` yang Sama dalam Go?

Bagaimana untuk Mengelakkan `io.EOF` Apabila Membaca Selepas Menulis ke `os.File` yang Sama dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-12-14 08:53:14259semak imbas

How to Avoid `io.EOF` When Reading After Writing to the Same `os.File` in Go?

Membaca dan Menulis ke *os.Fail yang Sama dalam Go

Memahami Isu

Dalam Go, apabila menulis data ke fail menggunakan os .Fail, penuding fail dialihkan ke hujung fail selepas menulis. Selepas itu, apabila cuba membaca data daripada penuding fail yang sama, ralat io.EOF (Tamat Fail) serta-merta ditemui kerana penuding fail masih berada di hujung fail.

Resolusi

Untuk berjaya membaca data daripada penuding fail yang sama selepas menulis, anda mesti menetapkan semula penuding fail ke permulaan fail menggunakan kaedah Seek. Begini cara anda boleh mengubah suai kod contoh:

// Seek to the beginning of the file before reading
_, err := f.Seek(0, 0)
if err != nil {
    fmt.Println("Error", err)
}

// 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))
}

Dengan menambahkan kaedah Seek, penuding fail ditetapkan semula ke permulaan fail sebelum membaca, membenarkan operasi baca seterusnya mendapatkan semula data bertulis tanpa menyebabkan ralat io.EOF.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan `io.EOF` Apabila Membaca Selepas Menulis ke `os.File` yang Sama dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn