Eine Datei zeilenweise in Go lesen
Daniel Hayes
Full-Stack Engineer · Leapcell

Key Takeaways
- Verwenden Sie
bufio.Scanner
für effizientes zeilenweises Lesen von Dateien. - Behandeln Sie potenzielle Fehler ordnungsgemäß, um unerwartete Ausfälle zu vermeiden.
- Passen Sie die Puffergröße für lange Zeilen mit
Scanner.Buffer()
an.
Das zeilenweise Lesen von Dateien ist eine häufige Aufgabe beim Programmieren, insbesondere bei der Verarbeitung von Textdateien oder Protokollen. In Go kann dies effizient mit dem Paket bufio
erreicht werden, das gepufferte E/A-Operationen bereitstellt. Dieser Artikel führt Sie durch den Prozess des zeilenweisen Lesens einer Datei mit Go.
Verwenden von bufio.Scanner
Der bufio.Scanner
ist ein praktisches Werkzeug zum Lesen von Daten wie Textzeilen. Er liest die Eingabe und teilt sie anhand eines angegebenen Trennzeichens in Token auf, das standardmäßig aus Zeilenumbruchzeichen besteht, was ihn ideal für das zeilenweise Lesen macht.
Hier ist, wie Sie bufio.Scanner
verwenden können, um eine Datei zeilenweise zu lesen:
package main import ( "bufio" "fmt" "log" "os" ) func main() { // Datei öffnen file, err := os.Open("path/to/your/file.txt") if err != nil { log.Fatalf("Fehler beim Öffnen der Datei: %s", err) } defer file.Close() // Einen neuen Scanner für die Datei erstellen scanner := bufio.NewScanner(file) // Über jede Zeile iterieren for scanner.Scan() { line := scanner.Text() // Die Zeile hier verarbeiten fmt.Println(line) } // Auf Fehler während des Scannens prüfen if err := scanner.Err(); err != nil { log.Fatalf("Fehler beim Lesen der Datei: %s", err) } }
In diesem Beispiel:
- Wir öffnen die Datei mit
os.Open
. Es ist wichtig, alle Fehler zu behandeln, die bei dieser Operation auftreten können. - Ein
bufio.Scanner
wird für die Datei erstellt. Der Scanner teilt die Eingabe standardmäßig in Zeilen auf. - Wir iterieren mit
scanner.Scan()
über jede Zeile. Die Methodescanner.Text()
gibt die aktuelle Zeile als String zurück. - Nach der Schleife prüfen wir mit
scanner.Err()
, ob während des Scannens Fehler aufgetreten sind.
Umgang mit langen Zeilen
Der bufio.Scanner
hat eine Standardpuffergröße, die für extrem lange Zeilen möglicherweise nicht ausreicht. Wenn Sie Zeilen erwarten, die länger als 64 KB sind, können Sie die Puffergröße mit der Methode Scanner.Buffer
anpassen:
scanner := bufio.NewScanner(file) buf := make([]byte, 0, 1024*1024) // 1 MB Puffer scanner.Buffer(buf, 1024*1024)
Dies setzt den Puffer auf 1 MB und nimmt bei Bedarf längere Zeilen auf.
Fazit
Das zeilenweise Lesen einer Datei in Go ist mit dem bufio.Scanner
unkompliziert. Es bietet eine einfache und effiziente Möglichkeit, jede Zeile zu verarbeiten und gängige Aufgaben wie das Lesen von Protokollen oder das Verarbeiten von Textdateien zu erledigen. Stellen Sie immer sicher, dass Sie potenzielle Fehler ordnungsgemäß behandeln und die Puffergröße anpassen, wenn Sie mit Dateien arbeiten, die ungewöhnlich lange Zeilen enthalten können.
FAQs
Es sind standardmäßig Zeilenumbruchzeichen (\n
).
Verwenden Sie Scanner.Buffer()
, um die Puffergröße zu erhöhen.
Verwenden Sie scanner.Err()
, um Fehler zu prüfen und ordnungsgemäß zu behandeln.
Wir sind Leapcell, Ihre erste Wahl für das Hosten von Go-Projekten.
Leapcell ist die Serverless-Plattform der nächsten Generation für Webhosting, asynchrone Aufgaben und Redis:
Multi-Language-Unterstützung
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt Projekte kostenlos bereit
- Zahlen Sie nur für die Nutzung – keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 $ unterstützen 6,94 Millionen Anfragen bei einer durchschnittlichen Reaktionszeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeitmetriken und -protokollierung für verwertbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Autoskalierung zur einfachen Bewältigung hoher Parallelität.
- Kein betrieblicher Overhead – konzentrieren Sie sich einfach auf das Bauen.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ