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