Heim >Backend-Entwicklung >Golang >Wie lese ich in Go in eine temporäre Datei geschriebene Daten?

Wie lese ich in Go in eine temporäre Datei geschriebene Daten?

Linda Hamilton
Linda HamiltonOriginal
2024-11-17 02:53:03589Durchsuche

How to Read Data Written to a Temp File in Go?

Lesen von Daten, die in Go in eine temporäre Datei geschrieben wurden

In Go kann das Erstellen und Lesen aus einer temporären Datei eine Herausforderung darstellen. Betrachten Sie den folgenden vereinfachten Testcode:

package main

import (
    "bufio"
    "fmt"
    "io/ioutil"
    "log"
    "os"
    "path/filepath"
)

func main() {

    tmpFile, err := ioutil.TempFile("", fmt.Sprintf("%s-", filepath.Base(os.Args[0])))
    if err != nil {
        log.Fatal("Could not create temporary file", err)
    }
    fmt.Println("Created temp file:", tmpFile.Name())
    defer tmpFile.Close()

    fmt.Println("Writing some data to the temp file")
    if _, err = tmpFile.WriteString("test data"); err != nil {
        log.Fatal("Unable to write to temporary file", err)
    } else {
        fmt.Println("Data should have been written")
    }

    fmt.Println("Trying to read the temp file now")
    s := bufio.NewScanner(tmpFile)
    for s.Scan() {
        fmt.Println(s.Text())
    }
    err = s.Err()
    if err != nil {
        log.Fatal("error reading temp file", err)
    }
}

Während der Code die temporäre Datei korrekt erstellt und in sie schreibt, führt der Leseversuch zu einer leeren Ausgabe. Dies liegt daran, dass der Schreibvorgang den Zeiger an das Ende der Datei verschiebt. Um die Daten zu lesen, müssen wir zum Anfang zurückgehen.

Lösung:

Um dieses Problem zu beheben, fügen Sie tmpFile.Seek(0, 0) zum Verschieben hinzu den Zeiger zurück zum Anfang der Datei, bevor versucht wird, Folgendes zu lesen:

    tmpFile.Seek(0, 0)
    s := bufio.NewScanner(tmpFile)
    for s.Scan() {
        fmt.Println(s.Text())
    }

Mit dieser Änderung liest und druckt der Code die Daten korrekt. Denken Sie daran, die Datei vor dem Beenden mit defer tmpFile.Close() zu schließen, um eine ordnungsgemäße Ressourcenverwaltung sicherzustellen.

Das obige ist der detaillierte Inhalt vonWie lese ich in Go in eine temporäre Datei geschriebene Daten?. 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