Kao programski jezik, Go ima širok raspon ugrađenih značajki, uključujući mogućnost stvaranja, čitanja i pisanja datoteka poput tekstualnih (.txt) datoteka.

Datoteke su važne komponente našeg svakodnevnog života u modernom svijetu. Tekstualne datoteke korisne su za pohranjivanje strukturiranih podataka čitljivih ljudima bez upotrebe vanjskog softvera ili baza podataka.

Ako se pitate kako možete početi manipulirati tekstualnim datotekama u Gou, ovaj je članak pravo mjesto za vas.

Bufio paket u Go

The bufio paket, koji je dio Go standardne biblioteke, koristi se za međuspremnik ulaznih i izlaznih operacija, otuda i naziv. The bufio paket se temelji na io. Čitač i io. Pisac sučelja, koja se intenzivno koriste u implementaciji većine Goovih standardnih paketa.

The bufio paket ide korak dalje implementacijom međuspremnika, što ga čini korisnim za IO operacije koje uključuju tekstualne podatke.

Za korištenje bufio paket u svom programu, trebali biste ga uvesti zajedno s drugim paketima.

uvoz (
"fmt"
"bufio"
)
instagram viewer

Vjerojatno ste čuli kad ste počeo s Go da dolazi sa svime što bi vam moglo zatrebati kao programeru. Za izravnu komunikaciju s vašim operativnim sustavom postoji paket tzv os koji pruža funkcije neovisne o platformi.

The os i bufio paketi čine manipulaciju tekstualnim datotekama nevjerojatno jednostavnim.

Iako je velika većina os Funkcije paketa slične su Unixu, sve koriste Go stil rukovanja pogreškama, što olakšava čitanje poruka o pogrešci i debug koda.

Dakle, kako manipulirati datotekama koje sadrže tekst u Go-u?

Kako čitati podatke iz tekstualne datoteke

Za čitanje podataka iz tekstualnih datoteka, trebate nazvati os paketa Otvoren() funkcija koja prihvaća naziv datoteke za čitanje kao parametar. Drugi način za dobivanje datoteke je korištenje Otvorena datoteka() funkcija.

Glavna razlika između Otvoren() i Otvorena datoteka() je u njihovoj provedbi. Otvoren() otvara datoteku u načinu rada samo za čitanje (s SAMO O_RD zastava), dok Otvorena datoteka() daje veću fleksibilnost prihvaćanjem tri parametra, naime:

  • Naziv datoteke
  • Način otvaranja datoteke: Važeći načini otvaranja datoteke prikazani su u donjoj tablici.
    Zastava Značenje
    SAMO O_RD Otvara datoteku u načinu rada samo za čitanje
    O_POGREŠNO Otvara datoteku u načinu rada samo za pisanje
    O_RDWR Otvara datoteku u načinu čitanja i pisanja
    O_DODAJ Dodaje podatke u datoteku prilikom pisanja
    O_KREIRATI Stvara novu datoteku ako nijedna ne postoji
    O_EXCL Koristi se s O_CREATE, za označavanje da se datoteka treba stvoriti samo ako ne postoji
    O_SYNC Otvara datoteku za sinkroni I/O
    O_TRUNC Skratite datoteku pri otvaranju, ako je moguće
  • Dopuštenja za datoteke: ista kao bitovi dopuštenja datoteke u Linuxu koristi se za određivanje pravila pristupa datoteci, npr. 0777 za dodjelu dopuštenja za čitanje, pisanje i izvršavanje svim vrstama korisnika.

Kôd u nastavku pokazuje kako čitati podatke iz tekstualne datoteke u Go koristeći os. Otvoren(), i Skenirati() koji u ovom slučaju radi u a Idi na petlju.

paket glavni
uvoz (
"bufio"
"fmt"
"log"
"os"
)
/**
SADRŽAJ "testfile.txt" datoteka.
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, pogreška := os. Otvoren("testfile.txt")
// druga metoda koja koristi os. Otvorena datoteka()
// datoteka, pogreška = os. Otvorena datoteka("testfile.txt", os. O_RDONLY, 0644)
if err != nula {
log.Kobno(pogriješiti)
}
odgoditidatoteka.Zatvoriti()
fmt. Println("Datoteka je uspješno otvorena. Sada čitam sadržaj datoteke red po red:")
// stvoriti skener iz the datotekadočitatitekstiz
skener := bufio. NewScanner (datoteka)
// skeniranje ili čitanje bajtova teksta redak po redak
zaskener.Skenirati() {
fmt.Ispiši(skener.Tekst())
}
if err := skener. Err(); pogreška != nula {
log.Kobno(pogriješiti)
}
}

Kada pokrenete gornji kod s idi pokreni filename.go, proizvodi izlaz prikazan u nastavku:

Ako unesete samo naziv datoteke, a ne i putanju do Otvoren() ili Otvorena datoteka() funkciju za operacije čitanja, Go pretpostavlja da je datoteka u trenutnom direktoriju i vraća pogrešku ako je ne pronađe. Trebali biste unijeti stazu do datoteke ako trebate raditi s datotekama izvan trenutnog direktorija.

Kako zapisati podatke u tekstualnu datoteku

The bufio paket pruža međuspremnik Pisac sučelje koje pohranjuje bajtove podataka i zapisuje ih u datoteku uz pomoć a Ispiranje() funkcija.

Sljedeći primjer koda je nastavak onog za čitanje datoteke. U ovom primjeru podaci se upisuju u postojeće testfile.txt koristiti O_POGREŠNO i O_DODAJ zastave.

Dodajte sljedeće retke koda u gornji program, prije završne vitičaste zagrade glavni() funkcija:

// zapis izlaznih podataka u datoteku
datoteka, pogreška = os. OpenFile("testfile.txt", os. O_APPEND|os. O_POGREŠNO, 0644)
ako pogriješiti != nula {
log. Fatalno (greška)
}
odgoditi datoteka. Zatvoriti()
fmt. Println("Datoteka je uspješno otvorena, Sada se priprema za pisanje podataka u datoteku...")
// kreiranje spremnika Writer objekta za pisanje podataka u datoteku
tekstopisac := bufio. NewWriter (datoteka)
// pisanje niza u međuspremnik prije spremanja datoteke.
_, pogreška = TextWriter. WriteString("-Ovo je a novi tekst dodan u datoteku.")
ako pogriješiti != nula {
log. Fatalno (greška)
}
tekstopisac. Ispiranje()
fmt. Println("Podaci uspješno zapisani u datoteku...")

Izlaz vašeg kompletnog programa trebao bi izgledati ovako:

Kada otvorite testfile.txt datoteku, također ćete vidjeti novi redak pridodan na kraju datoteke baš kao na slici ispod:

Rukovanje datotekama u Gou je jednostavno

Go vam omogućuje rad s različitim datotekama, a ne samo tekstualnim datotekama. Postoje brojne dodatne ugrađene biblioteke i funkcije za rad s različitim vrstama podataka iz datoteka, uključujući JSON i CSV.

Da biste vidjeli kako se ponašaju različito ovisno o situaciji, možete eksperimentirati s raznim zastavicama i dozvolama za datoteke koje su dostupne za korištenje s Otvorena datoteka().