Kot programski jezik ima Go široko paleto vgrajenih funkcij, vključno z možnostjo ustvarjanja, branja in pisanja datotek, kot so besedilne (.txt) datoteke.
Datoteke so v sodobnem svetu pomembne sestavine našega vsakdana. Besedilne datoteke so uporabne za shranjevanje strukturiranih človeku berljivih podatkov brez uporabe zunanje programske opreme ali baz podatkov.
Če se sprašujete, kako bi lahko začeli manipulirati z besedilnimi datotekami v Go, je ta članek pravo mesto za vas.
Paket bufio v Go
The bufio paket, ki je del Gojeve standardne knjižnice, se uporablja za medpomnilniške vhodne in izhodne operacije, od tod tudi ime. The bufio paket temelji na io. Bralec in io. Pisatelj vmesniki, ki se v veliki meri uporabljajo pri izvajanju večine standardnih paketov Go.
The bufio paket gre še korak dlje z implementacijo medpomnjenja, zaradi česar je uporaben za IO operacije, ki vključujejo besedilne podatke.
Za uporabo bufio paket v vašem programu, ga morate uvoziti skupaj z drugimi paketi.
uvoz (
"fmt"
"bufio"
)
Verjetno ste slišali, ko ste začel z Go da ima vse, kar lahko potrebujete kot programer. Za neposredno komunikacijo z vašim operacijskim sistemom obstaja paket imenovan os ki zagotavlja funkcije, neodvisne od platforme.
The os in bufio paketi naredijo manipulacijo besedilnih datotek neverjetno preprosto.
Čeprav velika večina os Funkcije paketa so podobne sistemu Unix, vse uporabljajo slog obravnavanja napak Go, kar olajša branje sporočil o napakah in kodo za odpravljanje napak.
Torej, kako manipulirate z datotekami, ki vsebujejo besedilo v Go?
Kako brati podatke iz besedilne datoteke
Če želite prebrati podatke iz besedilnih datotek, morate poklicati os paketi Odprto() funkcija, ki kot parameter sprejme ime datoteke za branje. Druga metoda za pridobitev datoteke je uporaba Odpri datoteko() funkcijo.
Glavna razlika med Odprto() in Odpri datoteko() je v njihovem izvajanju. Odprto() odpre datoteko v načinu samo za branje (z SAMO O_RD zastava), medtem ko Odpri datoteko() daje večjo prilagodljivost s sprejetjem treh parametrov, in sicer:
- Ime datoteke
- Način odpiranja datoteke: veljavni načini odpiranja datoteke so prikazani v spodnji tabeli.
Zastava Pomen SAMO O_RD Odpre datoteko v načinu samo za branje O_NAROBE Odpre datoteko v načinu samo za pisanje O_RDWR Odpre datoteko v načinu branja in pisanja O_APPEND Med pisanjem doda podatke v datoteko O_USTVARI Ustvari novo datoteko, če nobena ne obstaja O_EXCL Uporablja se z O_CREATE za označevanje, da je treba datoteko ustvariti le, če ne obstaja O_SYNC Odpre datoteko za sinhroni V/I O_TRUNC Odrežite datoteko ob odprtju, če je mogoče - Dovoljenja za datoteke: Enako kot pri dovoljenja za datoteke v Linuxu uporablja se za določanje pravil za dostop do datotek, npr. 0777 za dodelitev dovoljenj za branje, pisanje in izvajanje vsem vrstam uporabnikov.
Spodnja koda prikazuje, kako prebrati podatke iz besedilne datoteke v Go z uporabo os. Odprto(), in Scan() ki v tem primeru teče v a Pojdi na zanko.
paket glavni
uvoz (
"bufio"
"fmt"
"dnevnik"
"os"
)
/**
VSEBINA "testfile.txt" mapa.
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 glavni(){
datoteka, napaka := os. Odprto("testfile.txt")
// druga metoda z uporabo os. Odpri datoteko()
// datoteka, napaka = os. Odpri datoteko("testfile.txt", os. O_RDONLY, 0644)
if err != nil {
dnevnik.Usodno(napaka)
}
odložitimapa.Zapri()
fmt. Println("Datoteka je bila uspešno odprta. Zdaj berem vsebino datoteke vrstico za vrstico:")
// ustvariti skener od the mapadoprebratibesedilood
skener := bufio. NewScanner (datoteka)
// skeniranje ali branje bajtov besedila vrstico za vrstico
zaskener.Skeniraj() {
fmt.Println(skener.Besedilo())
}
if err := skener. Err(); napaka != nič {
dnevnik.Usodno(napaka)
}
}
Ko zaženete zgornjo kodo z pojdi zaženi filename.go, ustvari rezultat, prikazan spodaj:
Če posredujete samo ime datoteke in ne poti do datoteke Odprto() oz Odpri datoteko() funkcijo za operacije branja, Go predpostavlja, da je datoteka v trenutnem imeniku, in vrne napako, če je ne najde. Vnesite pot do datoteke, če morate delati z datotekami zunaj trenutnega imenika.
Kako zapisati podatke v besedilno datoteko
The bufio paket zagotavlja medpomnilnik Pisatelj vmesnik, ki shranjuje bajte podatkov in jih zapisuje v datoteko s pomočjo a Izplakni() funkcijo.
Naslednji vzorec kode je nadaljevanje kode za branje datoteke. V tem primeru so podatki zapisani v obstoječe testfile.txt uporabljati O_NAROBE in O_APPEND zastave.
Zgornjemu programu dodajte naslednje vrstice kode pred zaključnim zavitim oklepajem glavni () funkcija:
// zapis izhodnih podatkov v datoteko
datoteka, napaka = os. OpenFile("testfile.txt", os. O_APPEND|os. NAPAKA, 0644)
če napaka!= nič {
dnevnik. Usodno (napaka)
}
odložiti mapa. Zapri()
fmt. Println("Datoteka je bila uspešno odprta, zdaj se pripravlja na zapisovanje podatkov v datoteko ...")
// ustvari objekt Writer v medpomnilniku za pisanje podatkov v datoteko
textWriter := bufio. NewWriter (datoteka)
// zapiši niz v medpomnilnik pred shranjevanjem datoteke.
_, err = besedilni pisatelj. WriteString("-To je a novo besedilo dodano datoteki.")
če napaka!= nič {
dnevnik. Usodno (napaka)
}
textWriter. Izplakni()
fmt. Println("Podatki uspešno zapisani v datoteko ...")
Rezultat vašega celotnega programa bi moral izgledati takole:
Ko odprete testfile.txt datoteko, boste videli tudi novo vrstico, dodano na koncu datoteke, tako kot na spodnji sliki:
Upravljanje datotek v Go je preprosto
Go vam omogoča delo z različnimi datotekami, ne samo z besedilnimi datotekami. Obstajajo številne dodatne vgrajene knjižnice in funkcije za delo z različnimi vrstami podatkov iz datotek, vključno z JSON in CSV.
Če želite videti, kako se različno obnašajo glede na situacijo, lahko eksperimentirate z različnimi zastavicami in dovoljenji za datoteke, ki so na voljo za uporabo z Odpri datoteko().