Heim >Backend-Entwicklung >Golang >Warum gibt das Lesen nach dem Schreiben auf denselben Go-Dateizeiger nichts zurück?

Warum gibt das Lesen nach dem Schreiben auf denselben Go-Dateizeiger nichts zurück?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-13 03:56:09603Durchsuche

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

Lesen und Schreiben in dieselbe Datei in Go

In Go wird die Arbeit mit Dateien durch den Typ os.File vereinfacht. Es kann jedoch ein Problem auftreten, wenn versucht wird, denselben Dateizeiger zu lesen und zu schreiben. Dieser Artikel behandelt ein solches Szenario und bietet eine Lösung.

Problem:

Sie versuchen, Daten in eine Datei zu schreiben und sie dann aus derselben Datei zurückzulesen Zeiger. Der Lesevorgang gibt jedoch nichts zurück.

Code:

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

Problem:

Im bereitgestellten Code Der Dateizeiger wird nach dem Schreibvorgang an das Ende der Datei verschoben. Wenn der Lesevorgang versucht wird, wird sofort das Ende der Datei erreicht, was zu einem io.EOF-Fehler führt.

Lösung:

Um dieses Problem zu beheben, müssen Sie Sie müssen den Dateizeiger vor dem Lesen manuell zum Anfang zurücksuchen.

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

Dieses Codefragment fügt vor dem Lesen einen Suchvorgang hinzu Schleife. Es setzt den Dateizeiger auf den Anfang der Datei, sodass der nachfolgende Lesevorgang die geschriebenen Daten abrufen kann.

Das obige ist der detaillierte Inhalt vonWarum gibt das Lesen nach dem Schreiben auf denselben Go-Dateizeiger nichts zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn