Som programmeringsspråk har Go et bredt spekter av innebygde funksjoner, inkludert muligheten til å lage, lese og skrive filer som tekstfiler (.txt).

Filer er viktige komponenter i vårt daglige liv i den moderne verden. Tekstfiler er nyttige for å lagre strukturerte menneskelesbare data uten bruk av ekstern programvare eller databaser.

Hvis du lurer på hvordan du kan begynne å manipulere tekstfiler i Go, er denne artikkelen det rette stedet for deg.

Bufio-pakken i Go

De bufio pakken, som er en del av Gos standardbibliotek, brukes til bufrede inngangs- og utdataoperasjoner, derav navnet. De bufio pakken bygger på io. Leser og io. Forfatter grensesnitt, som er mye brukt i implementeringen av flertallet av Gos standardpakker.

De bufio pakken går ett skritt videre ved å implementere buffering, noe som gjør den nyttig for IO-operasjoner som involverer tekstdata.

For å bruke bufio pakken i programmet, bør du importere den sammen med andre pakker.

import (
"fmt"
"bufio"
)

Du hørte sikkert når du kom i gang med Go

at den kommer med alt du måtte trenge som programmerer. For direkte kommunikasjon med operativsystemet ditt finnes det en pakke som heter os som gir plattformuavhengige funksjoner.

De os og bufio pakker gjør tekstfilmanipulering utrolig enkel.

Selv om det store flertallet av os pakkens funksjoner er Unix-lignende, de bruker alle Go-stilen for feilhåndtering, som gjør det enkelt å lese feilmeldinger og feilsøkingskode.

Så hvordan manipulerer du filer som inneholder tekst i Go?

Hvordan lese data fra en tekstfil

For å lese data fra tekstfiler, må du ringe til os pakkens Åpen() funksjon, som godtar navnet på filen som skal leses som en parameter. En annen metode for å få filen er å bruke Åpen fil() funksjon.

Den største forskjellen mellom Åpen() og Åpen fil() er i deres gjennomføring. Åpen() åpner en fil i skrivebeskyttet modus (med O_RDONLY flagg), mens Åpen fil() gir mer fleksibilitet ved å akseptere tre parametere, nemlig:

  • Filnavn
  • Filåpningsmodus: De gyldige filåpnemodusene vises i tabellen nedenfor.
    Flagg Betydning
    O_RDONLY Åpner filen i skrivebeskyttet modus
    O_FRITT Åpner filen i skrivebeskyttet modus
    O_RDWR Åpner filen i lese-skrivemodus
    O_APPEND Legger til data til filen når du skriver
    O_CREATE Oppretter en ny fil hvis ingen finnes
    O_EXCL Brukes med O_CREATE, for å indikere at filen bare skal opprettes hvis den ikke eksisterer
    O_SYNC Åpner fil for synkron I/O
    O_TRUNC Kutt av filen på åpen, hvis mulig
  • Filtillatelser: Samme som filtillatelsesbiter i Linux brukes til å spesifisere filtilgangsregler, f.eks. 0777 for å gi lese-, skrive- og utføringstillatelser til alle brukertyper.

Koden nedenfor viser hvordan du leser data fra en tekstfil i Go ved hjelp av os. Åpen(), og Skann() som i dette tilfellet går i en Gå for loop.

pakke hoved-
import (
"bufio"
"fmt"
"Logg"
"os"
)
/**
INNHOLD I "testfile.txt" fil.
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 hoved-(){
fil, feil := os. Åpen("testfile.txt")
// en annen metode som bruker os. Åpen fil()
// fil, err = os. Åpen fil("testfile.txt", os. O_RDONLY, 0644)
hvis feil != null {
Logg.Fatal(feil)
}
utsettefil.Lukk()
fmt. Println("Filen ble åpnet. Leser nå filinnholdet linje for linje:")
// skape skanner fra de filtillesetekstfra
skanner := bufio. NewScanner (fil)
// skann eller les tekstbytene linje for linje
tilskanner.Skann() {
fmt.Skriv ut(skanner.Tekst())
}
hvis feil := skanner. Err(); feil != null {
Logg.Fatal(feil)
}
}

Når du kjører koden ovenfor med kjør filnavn.go, produserer den utgangen vist nedenfor:

Hvis du sender inn bare filnavnet og ikke banen til Åpen() eller Åpen fil() funksjon for leseoperasjoner, Go antar at filen er i den nåværende katalogen og returnerer en feil hvis den ikke finner den. Du bør sende inn banen til filen hvis du trenger å jobbe med filer utenfor gjeldende katalog.

Hvordan skrive data til en tekstfil

De bufio pakken gir en bufret Forfatter grensesnitt som lagrer byte med data og skriver dem til en fil ved hjelp av en Skyll() funksjon.

Den neste eksempelkoden er en fortsettelse av den som skal lese en fil. I dette eksemplet skrives data til det eksisterende testfile.txt bruker O_FRITT og O_APPEND flagg.

Legg til følgende linjer med kode til programmet ovenfor, før den avsluttende krøllete klammeparentesen til hoved() funksjon:

// skriv utdata til fil
fil, err = os. OpenFile("testfil.txt", os. O_APPEND|os. Å_FRITT, 0644)
hvis feil!= null {
Logg. Fatal (feil)
}
utsette fil. Lukk()
fmt. Println("Fil åpnet vellykket, forbereder nå til å skrive data til fil...")
// opprette bufret Writer-objekt for å skrive data til fil
textWriter := bufio. NewWriter (fil)
// skriv streng til buffer før du lagrer filen.
_, feil = tekstskriver. WriteString("-Dette er en ny tekst lagt til filen.")
hvis feil!= null {
Logg. Fatal (feil)
}
tekstforfatter. Skyll()
fmt. Println("Data skrevet til filen vellykket...")

Utdataene fra hele programmet skal se slik ut:

Når du åpner testfile.txt fil, vil du også se den nye linjen lagt til på slutten av filen akkurat som bildet nedenfor:

Filhåndtering i Go er enkelt

Go lar deg jobbe med en rekke filer, ikke bare tekstfiler. Det er mange ekstra innebygde biblioteker og funksjoner for å jobbe med forskjellige typer data fra filer, inkludert JSON og CSV.

For å se hvordan de oppfører seg forskjellig avhengig av situasjonen, kan du eksperimentere med de ulike flaggene og filtillatelsene som er tilgjengelige for bruk med Åpen fil().