Als programmeertaal heeft Go een breed scala aan ingebouwde functies, waaronder de mogelijkheid om bestanden zoals tekstbestanden (.txt) te maken, te lezen en te schrijven.

Bestanden zijn belangrijke onderdelen van ons dagelijks leven in de moderne wereld. Tekstbestanden zijn handig voor het opslaan van gestructureerde, door mensen leesbare gegevens zonder het gebruik van externe software of databases.

Als je je afvraagt ​​hoe je zou kunnen beginnen met het manipuleren van tekstbestanden in Go, dan is dit artikel de juiste plek voor jou.

Het bufio-pakket in Go

De bufio package, dat deel uitmaakt van de standaardbibliotheek van Go, wordt gebruikt voor gebufferde invoer- en uitvoerbewerkingen, vandaar de naam. De bufio pakket bouwt voort op de io. Lezer En io. auteur interfaces, die op grote schaal worden gebruikt bij de implementatie van de meeste standaardpakketten van Go.

De bufio pakket gaat nog een stap verder door buffering te implementeren, waardoor het nuttig wordt voor IO-bewerkingen met tekstuele gegevens.

instagram viewer

Om de bufio package in uw programma, moet u het samen met andere packages importeren.

importeren (
"fmt"
"bufio"
)

Je hebt het waarschijnlijk gehoord toen je aan de slag gegaan met Go dat het wordt geleverd met alles wat je nodig zou kunnen hebben als programmeur. Voor directe communicatie met uw besturingssysteem is er een pakket genaamd os die platformonafhankelijke functies biedt.

De os En bufio pakketten maken het manipuleren van tekstbestanden ongelooflijk eenvoudig.

Hoewel de overgrote meerderheid van de os pakketfuncties zijn Unix-achtig, ze maken allemaal gebruik van de Go-stijl van foutafhandeling, wat het eenvoudig maakt om foutmeldingen te lezen en code te debuggen.

Dus, hoe manipuleer je bestanden met tekst in Go?

Gegevens uit een tekstbestand lezen

Om gegevens uit tekstbestanden te lezen, moet u de os pakketjes Open() functie, die de naam van het te lezen bestand als parameter accepteert. Een andere methode om het bestand te krijgen is door de Open bestand() functie.

Het grote verschil tussen Open() En Open bestand() zit in de uitvoering ervan. Open() opent een bestand in alleen-lezen modus (met de O_RDONLY vlag), terwijl Open bestand() geeft meer flexibiliteit door drie parameters te accepteren namelijk:

  • Bestandsnaam
  • Modus voor het openen van bestanden: De geldige modi voor het openen van bestanden worden weergegeven in de onderstaande tabel.
    Vlag Betekenis
    O_RDONLY Opent het bestand in alleen-lezen modus
    O_WRONLY Opent het bestand in alleen-schrijven-modus
    O_RDWR Opent het bestand in lees-schrijfmodus
    O_APPEND Voegt gegevens toe aan het bestand tijdens het schrijven
    O_CREATE Maakt een nieuw bestand als er geen bestaat
    O_EXCL Gebruikt met O_CREATE, om aan te geven dat het bestand alleen moet worden gemaakt als het niet bestaat
    O_SYNC Opent bestand voor synchrone I/O
    O_TRUNC Kap het bestand af bij openen, indien mogelijk
  • Bestandsrechten: Hetzelfde als de bits voor bestandsrechten in Linux gebruikt voor het specificeren van regels voor bestandstoegang, bijvoorbeeld 0777 om lees-, schrijf- en uitvoeringsrechten te verlenen aan alle gebruikerstypen.

De onderstaande code laat zien hoe u gegevens uit een tekstbestand in Go kunt lezen met behulp van os. Open(), En Scannen() die in dit geval loopt in een Ga voor lus.

pakket voornaamst
importeren (
"bufio"
"fmt"
"loggen"
"os"
)
/**
INHOUD VAN DE "testbestand.txt" bestand.
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
*/
func voornaamst(){
bestand, fout := os. Open("testbestand.txt")
// een andere methode met os. Open bestand()
// bestand, fout = os. Open bestand("testbestand.txt", os. O_RDALLEEN, 0644)
als err != nihil {
loggen.Fataal(fout)
}
verschuivenbestand.Dichtbij()
fmt. Println("Bestand geopend. Lees nu de inhoud van het bestand regel voor regel:")
// creëren scanner van de bestandnaarlezentekstvan
scanner := bufio. NieuweScanner (bestand)
// scan of lees de bytes tekst regel voor regel
voorscanner.Scannen() {
fmt.Println(scanner.Tekst())
}
als err := scanner. Fout(); err != nihil {
loggen.Fataal(fout)
}
}

Wanneer u de bovenstaande code uitvoert met ga bestandsnaam.go uitvoeren, produceert het de onderstaande uitvoer:

Als u alleen de bestandsnaam doorgeeft en niet het pad naar het Open() of Open bestand() functie voor leesbewerkingen, gaat Go ervan uit dat het bestand zich in de huidige map bevindt en retourneert een fout als het het niet vindt. U moet het pad naar het bestand doorgeven als u met bestanden buiten de huidige map moet werken.

Gegevens naar een tekstbestand schrijven

De bufio pakket biedt een gebufferd auteur interface die bytes aan gegevens opslaat en naar een bestand schrijft met behulp van een doorspoelen() functie.

De volgende voorbeeldcode is een voortzetting van de code om een ​​bestand te lezen. In dit voorbeeld worden gegevens naar het bestaande geschreven testbestand.txt de... gebruiken O_WRONLY En O_APPEND vlaggen.

Voeg de volgende regels code toe aan het bovenstaande programma, vóór de afsluitende accolade van het voornaamst() functie:

// schrijf uitvoergegevens naar bestand
bestand, fout = os. OpenFile("testbestand.txt", os. O_APPEND|os. O_WRONLY, 0644)
als fout!= nihil {
loggen. dodelijk (err)
}
verschuiven bestand. Dichtbij()
fmt. Println ("Bestand succesvol geopend, wordt nu voorbereid om gegevens naar bestand te schrijven...")
// creëer een gebufferd Writer-object om gegevens naar een bestand te schrijven
tekstschrijver := bufio. NewWriter (bestand)
// schrijf string naar buffer voordat bestand wordt opgeslagen.
_, fout = tekstschrijver. WriteString("-Dit is een nieuw tekst toegevoegd aan het bestand.")
als fout!= nihil {
loggen. dodelijk (err)
}
tekstschrijver. doorspoelen()
fmt. Println("Gegevens succesvol naar bestand geschreven...")

De uitvoer van uw volledige programma zou er als volgt uit moeten zien:

Wanneer u de testbestand.txt bestand, ziet u ook de nieuwe regel toegevoegd aan het einde van het bestand, net als de afbeelding hieronder:

Bestandsafhandeling in Go is eenvoudig

Met Go kunt u met verschillende bestanden werken, niet alleen met tekstbestanden. Er zijn tal van extra ingebouwde bibliotheken en functies voor het werken met verschillende soorten gegevens uit bestanden, waaronder JSON en CSV.

Om te zien hoe ze zich afhankelijk van de situatie anders gedragen, kunt u experimenteren met de verschillende vlaggen en bestandsmachtigingen die beschikbaar zijn voor gebruik met Open bestand().