Heim >Backend-Entwicklung >Golang >Warum gibt das Lesen nach dem Schreiben auf denselben Go-Dateizeiger nichts zurück?
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!