Heim >Backend-Entwicklung >Golang >Wie vermeide ich „io.EOF' beim Lesen, nachdem ich in Go in dieselbe „os.File' geschrieben habe?

Wie vermeide ich „io.EOF' beim Lesen, nachdem ich in Go in dieselbe „os.File' geschrieben habe?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-14 08:53:14258Durchsuche

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

Lesen und Schreiben in dieselbe *os.File in Go

Verstehen des Problems

In Go, wenn Daten in eine Datei mit OS geschrieben werden .File, der Dateizeiger wird nach dem Schreiben an das Ende der Datei verschoben. Wenn anschließend versucht wird, Daten aus demselben Dateizeiger zu lesen, tritt sofort ein io.EOF-Fehler (End of File) auf, da sich der Dateizeiger immer noch am Ende der Datei befindet.

Lösung

Um nach dem Schreiben erfolgreich Daten aus demselben Dateizeiger zu lesen, müssen Sie den Dateizeiger mithilfe der Seek-Methode auf den Anfang der Datei zurücksetzen. So können Sie den Beispielcode ändern:

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

Durch Hinzufügen der Seek-Methode wird der Dateizeiger vor dem Lesen auf den Anfang der Datei zurückgesetzt, sodass die nachfolgenden Lesevorgänge die geschriebenen Daten ohne Probleme abrufen können ein io.EOF-Fehler.

Das obige ist der detaillierte Inhalt vonWie vermeide ich „io.EOF' beim Lesen, nachdem ich in Go in dieselbe „os.File' geschrieben habe?. 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