Heim  >  Artikel  >  Backend-Entwicklung  >  Wie lese ich den Inhalt einer Textdatei in Go?

Wie lese ich den Inhalt einer Textdatei in Go?

Barbara Streisand
Barbara StreisandOriginal
2024-11-13 15:13:02455Durchsuche

How to Read the Contents of a Text File in Go?

So lesen Sie eine Textdatei in Go

Bei der Arbeit mit Textdateien in Go ist es wichtig zu verstehen, wie man deren Inhalt liest. Die von Ihnen gestellte Frage „Wie liest man eine Textdatei? [Duplikat]“ deutet jedoch darauf hin, dass diese Aufgabe möglicherweise komplexer ist, als es scheint.

Der von Ihnen bereitgestellte Code:

package main

import (
    "fmt"
    "os"
    "log"
)

func main() {
    file, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Print(file)
}

Liest die Datei erfolgreich, aber die Ausgabe ist lediglich der Zeigerwert des Dateideskriptors (*os.File). Um den Inhalt der Datei tatsächlich zu erhalten, müssen Sie eine von mehreren Techniken anwenden:

Dateiinhalt in den Speicher einlesen

Bei kleinen Dateien besteht der einfachste Ansatz darin, zum Laden io/ioutil.ReadAll zu verwenden die gesamte Datei in den Speicher.

func main() {
    file, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    b, err := io.ReadAll(file)
    fmt.Print(b)
}

Lesen in Blöcken

Bei größeren Dateien kann das Lesen in Blöcken speichereffizienter sein.

func main() {
    file, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    buf := make([]byte, 32*1024)

    for {
        n, err := file.Read(buf)

        if n > 0 {
            fmt.Print(buf[:n])
        }

        if err == io.EOF {
            break
        }
        if err != nil {
            log.Printf("read %d bytes: %v", n, err)
            break
        }
    }
}

Verwendung eines Scanners

Schließlich können Sie das bufio-Paket verwenden, um einen Scanner zu erstellen, der die Datei in Token liest und dabei basierend auf einem Trennzeichen (standardmäßig eine neue Zeile) fortschreitet.

func main() {
    file, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)

    for scanner.Scan() {
        fmt.Println(scanner.Text())
        fmt.Println(scanner.Bytes())
    }
}

Das obige ist der detaillierte Inhalt vonWie lese ich den Inhalt einer Textdatei in Go?. 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