Als Programmiersprache verfügt Go über eine Vielzahl integrierter Funktionen, einschließlich der Möglichkeit, Dateien wie Textdateien (.txt) zu erstellen, zu lesen und zu schreiben.

Dateien sind wichtige Bestandteile unseres täglichen Lebens in der modernen Welt. Textdateien sind nützlich, um strukturierte, für Menschen lesbare Daten ohne die Verwendung externer Software oder Datenbanken zu speichern.

Wenn Sie sich fragen, wie Sie anfangen könnten, Textdateien in Go zu manipulieren, sind Sie in diesem Artikel genau richtig.

Das bufio-Paket in Go

Der bufio Das Paket, das Teil der Standardbibliothek von Go ist, wird für gepufferte Eingabe- und Ausgabeoperationen verwendet, daher der Name. Der bufio Paket baut auf dem auf io. Leser Und io. Schriftsteller Schnittstellen, die bei der Implementierung der meisten Standardpakete von Go ausgiebig verwendet werden.

Der bufio Das Paket geht noch einen Schritt weiter, indem es Pufferung implementiert, was es für E/A-Operationen mit Textdaten nützlich macht.

instagram viewer

Um die zu verwenden bufio Paket in Ihrem Programm, sollten Sie es zusammen mit anderen Paketen importieren.

importieren (
"fmt"
"bufio"
)

Sie haben wahrscheinlich gehört, als Sie habe mit Go angefangen dass es mit allem ausgestattet ist, was man als Programmierer braucht. Für die direkte Kommunikation mit Ihrem Betriebssystem gibt es ein Paket namens os die plattformunabhängige Funktionen bereitstellt.

Der os Und bufio Pakete machen die Bearbeitung von Textdateien unglaublich einfach.

Obwohl die überwiegende Mehrheit der os Die Funktionen des Pakets sind Unix-ähnlich, sie verwenden alle den Go-Stil der Fehlerbehandlung, was es einfach macht, Fehlermeldungen zu lesen und Code zu debuggen.

Wie bearbeiten Sie also Dateien mit Text in Go?

So lesen Sie Daten aus einer Textdatei

Um Daten aus Textdateien zu lesen, müssen Sie die aufrufen os Pakete Offen() Funktion, die den Namen der zu lesenden Datei als Parameter akzeptiert. Eine andere Methode, um die Datei abzurufen, ist die Verwendung der Datei öffnen() Funktion.

Der Hauptunterschied zw Offen() Und Datei öffnen() liegt in ihrer Umsetzung. Offen() öffnet eine Datei im schreibgeschützten Modus (mit der NUR O_RD Flagge), während Datei öffnen() bietet mehr Flexibilität, indem drei Parameter akzeptiert werden, nämlich:

  • Dateinamen
  • Dateiöffnungsmodus: Die gültigen Dateiöffnungsmodi sind in der folgenden Tabelle aufgeführt.
    Flagge Bedeutung
    NUR O_RD Öffnet die Datei im schreibgeschützten Modus
    O_FALSCH Öffnet die Datei im schreibgeschützten Modus
    O_RDWR Öffnet die Datei im Lese-/Schreibmodus
    O_APPEND Fügt beim Schreiben Daten an die Datei an
    O_ERSTELLEN Erstellt eine neue Datei, falls keine vorhanden ist
    O_EXCL Wird mit O_CREATE verwendet, um anzugeben, dass die Datei nur erstellt werden soll, wenn sie nicht existiert
    O_SYNC Öffnet Datei für synchrone I/O
    O_TRUNC Schneiden Sie die Datei nach Möglichkeit beim Öffnen ab
  • Dateiberechtigungen: Gleich wie die Dateiberechtigungsbits in Linux Wird zum Festlegen von Dateizugriffsregeln verwendet, z. B. 0777, um Lese-, Schreib- und Ausführungsberechtigungen für alle Benutzertypen zu erteilen.

Der folgende Code zeigt, wie Daten aus einer Textdatei in Go gelesen werden os. Offen(), Und Scan() was in diesem Fall in a läuft Gehen Sie für Schleife.

Paket hauptsächlich
importieren (
"bufio"
"fmt"
"Protokoll"
"os"
)
/**
INHALT DER "testdatei.txt" Datei.
lorem ipsum dolor sit amet
LOREM IPSUM DOLOR SIT AMET
Lorem ipsum dolor sit amet
Lorem Ipsum Dolor Sit Amet
lOREM iPSUM dOLOR SIT aMET
LoreM Ipsum DoLoR Sit AmEt
*/
Funk hauptsächlich(){
Datei, err := os. Offen("testdatei.txt")
// eine andere Methode mit os. Datei öffnen()
// Datei, Fehler = os. Datei öffnen("testdatei.txt", os. O_RDONLY, 0644)
wenn err != nil {
Protokoll.Tödlich(irren)
}
verschiebenDatei.Schließen()
fmt. Println("Datei erfolgreich geöffnet. Lesen Sie nun den Inhalt der Datei Zeile für Zeile:")
// erstellen Scanner aus Die DateiZulesenTextaus
Scanner := bufio. NewScanner (Datei)
// Scannen oder lesen Sie die Bytes des Textes Zeile für Zeile
fürScanner.Scan() {
fmt.Println(Scanner.Text())
}
if err := Scanner. Irren(); ähm != nil {
Protokoll.Tödlich(irren)
}
}

Wenn Sie den obigen Code mit ausführen gehen Sie Dateiname.go ausführen, erzeugt es die unten gezeigte Ausgabe:

Übergeben Sie nur den Dateinamen und nicht den Pfad zur Offen() oder Datei öffnen() Funktion für Leseoperationen, geht Go davon aus, dass sich die Datei im aktuellen Verzeichnis befindet, und gibt einen Fehler zurück, wenn es sie nicht findet. Sie sollten den Pfad zu der Datei übergeben, wenn Sie mit Dateien außerhalb des aktuellen Verzeichnisses arbeiten müssen.

So schreiben Sie Daten in eine Textdatei

Der bufio Paket bietet eine gepufferte Schriftsteller Schnittstelle, die Datenbytes speichert und sie mit Hilfe von a in eine Datei schreibt Spülen() Funktion.

Der nächste Beispielcode ist eine Fortsetzung des Codes zum Lesen einer Datei. In diesem Beispiel werden Daten in die vorhandenen geschrieben testdatei.txt Verwendung der O_FALSCH Und O_APPEND Flaggen.

Fügen Sie dem Programm oben die folgenden Codezeilen vor der schließenden geschweiften Klammer von hinzu hauptsächlich() Funktion:

// Ausgabedaten in Datei schreiben
Datei, Fehler = os. OpenFile("testfile.txt", os. O_APPEND|os. O_FALSCH, 0644)
Wenn äh != Null {
Protokoll. Fatal (äh)
}
verschieben Datei. Schließen()
fmt. Println("Datei erfolgreich geöffnet, bereite jetzt das Schreiben von Daten in die Datei vor...")
// Gepuffertes Writer-Objekt erstellen, um Daten in die Datei zu schreiben
textWriter := bufio. NewWriter (Datei)
// String vor dem Speichern der Datei in den Puffer schreiben.
_, err = textWriter. WriteString("-Dies ist eine neu Text zur Datei hinzugefügt.")
Wenn äh != Null {
Protokoll. Fatal (äh)
}
textWriter. Spülen()
fmt. Println("Daten erfolgreich in Datei geschrieben...")

Die Ausgabe Ihres vollständigen Programms sollte wie folgt aussehen:

Beim Öffnen der testdatei.txt Datei sehen Sie auch die neue Zeile, die am Ende der Datei angehängt wird, genau wie im Bild unten:

Die Dateiverwaltung in Go ist einfach

Mit Go können Sie mit einer Vielzahl von Dateien arbeiten, nicht nur mit Textdateien. Es gibt zahlreiche zusätzliche integrierte Bibliotheken und Funktionen zum Arbeiten mit verschiedenen Datentypen aus Dateien, einschließlich JSON und CSV.

Um zu sehen, wie sie sich je nach Situation unterschiedlich verhalten, können Sie mit den verschiedenen Flags und Dateiberechtigungen experimentieren, die zur Verwendung mit verfügbar sind Datei öffnen().