Ca limbaj de programare, Go are o gamă largă de funcții încorporate, inclusiv capacitatea de a crea, citi și scrie fișiere precum fișiere text (.txt).

Fișierele sunt componente importante ale vieții noastre de zi cu zi în lumea modernă. Fișierele text sunt utile pentru stocarea datelor structurate care pot fi citite de om, fără a utiliza software sau baze de date externe.

Dacă vă întrebați cum ați putea începe să manipulați fișierele text în Go, acest articol este locul potrivit pentru dvs.

Pachetul bufio din Go

The bufio pachetul, care face parte din biblioteca standard Go, este folosit pentru operațiunile de intrare și ieșire tamponate, de unde și numele. The bufio pachetul se bazează pe io. Cititor și io. Scriitor interfețe, care sunt utilizate pe scară largă în implementarea majorității pachetelor standard Go.

The bufio pachetul merge cu un pas mai departe prin implementarea tamponării, făcându-l util pentru operațiunile IO care implică date textuale.

Pentru a utiliza bufio pachet din programul dvs., ar trebui să îl importați împreună cu alte pachete.

instagram viewer
import (
"fmt"
"bufio"
)

Probabil ai auzit când ai am început cu Go că vine cu tot ce ai putea avea nevoie ca programator. Pentru comunicarea directă cu sistemul dvs. de operare, există un pachet numit os care oferă funcții independente de platformă.

The os și bufio pachetele fac manipularea fișierelor text incredibil de simplă.

Deși marea majoritate a os Funcțiile pachetului sunt asemănătoare Unix, toate folosesc stilul Go de gestionare a erorilor, ceea ce face simplă citirea mesajelor de eroare și codul de depanare.

Deci, cum manipulezi fișierele care conțin text în Go?

Cum să citiți datele dintr-un fișier text

Pentru a citi date din fișierele text, trebuie să apelați os pachetelor Deschis() funcția, care acceptă numele fișierului care urmează să fie citit ca parametru. O altă metodă de a obține fișierul este utilizarea fișierului Deschide fișierul() funcţie.

Diferența majoră între Deschis() și Deschide fișierul() este în implementarea lor. Deschis() deschide un fișier în modul doar citire (cu O_RDONLY steag), în timp ce Deschide fișierul() oferă mai multă flexibilitate prin acceptarea a trei parametri și anume:

  • Nume de fișier
  • Modul de deschidere a fișierului: modurile de deschidere a fișierelor valide sunt afișate în tabelul de mai jos.
    Steag Sens
    O_RDONLY Deschide fișierul în modul numai citire
    O_NEGRESIT Deschide fișierul în modul numai de scriere
    O_RDWR Deschide fișierul în modul citire-scriere
    O_APPEND Adaugă date la fișier în timpul scrierii
    O_CREATE Creează un fișier nou dacă nu există
    O_EXCL Folosit cu O_CREATE, pentru a indica faptul că fișierul ar trebui creat numai dacă nu există
    O_SYNC Deschide fișierul pentru I/O sincron
    O_TRUNC Trunchiați fișierul la deschidere, dacă este posibil
  • Permisiuni pentru fișiere: La fel ca biți de permisiuni pentru fișiere în Linux folosit pentru specificarea regulilor de acces la fișiere, de exemplu, 0777 pentru a acorda permisiuni de citire, scriere și executare tuturor tipurilor de utilizatori.

Codul de mai jos arată cum să citiți datele dintr-un fișier text în Go folosind os. Deschis(), și Scanează() care, în acest caz, rulează în a Mergi pentru buclă.

pachet principal
import (
"bufio"
"fmt"
"Buturuga"
"os"
)
/**
CONȚINUTUL "testfile.txt" fişier.
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 principal(){
fișier, err := os. Deschis("testfile.txt")
// altă metodă folosind os. Deschide fișierul()
// fișier, err = os. Deschide fișierul("testfile.txt", os. O_RDONLY, 0644)
daca greseste != nil {
Buturuga.Fatal(a greșit)
}
amânafişier.Închide()
fmt. Println("Fișierul a fost deschis cu succes. Acum citind conținutul fișierului linie cu linie:")
// crea scaner din cel fişierlacitittextdin
scanner := bufio. NewScanner (fișier)
// scanează sau citește octeții de text linie cu linie
pentruscaner.Scanare() {
fmt.Println(scaner.Text())
}
dacă greșește := scaner. Err(); err != nil {
Buturuga.Fatal(a greșit)
}
}

Când rulați codul de mai sus cu mergeți să rulați filename.go, produce rezultatul prezentat mai jos:

Dacă introduceți doar numele fișierului și nu calea către Deschis() sau Deschide fișierul() funcția pentru operațiuni de citire, Go presupune că fișierul se află în directorul actual și returnează o eroare dacă nu îl găsește. Ar trebui să treceți calea către fișier dacă trebuie să lucrați cu fișiere din afara directorului curent.

Cum să scrieți date într-un fișier text

The bufio pachetul oferă un tampon Scriitor interfață care stochează octeți de date și îi scrie într-un fișier cu ajutorul unui Culoare() funcţie.

Următorul cod exemplu este o continuare a celui de citire a unui fișier. În acest exemplu, datele sunt scrise în cele existente testfile.txt folosind O_NEGRESIT și O_APPEND steaguri.

Adăugați următoarele linii de cod la programul de mai sus, înainte de acolada de închidere a principal() funcţie:

// scrie datele de ieșire în fișier
fișier, err = os. OpenFile(„testfile.txt”, os. O_APPEND|os. O_CRĂUT, 0644)
dacă greș!= zero {
Buturuga. Fatal (eroare)
}
amâna fişier. Închide()
fmt. Println("Fișierul s-a deschis cu succes, acum ne pregătim pentru a scrie date în fișier...")
// creează un obiect Writer în buffer pentru a scrie date în fișier
textWriter := bufio. NewWriter (fișier)
// scrieți șirul în buffer înainte de a salva fișierul.
_, err = textWriter. WriteString("-Acesta este un nou text adăugat la fișier.")
dacă greș!= zero {
Buturuga. Fatal (eroare)
}
textWriter. Culoare()
fmt. Println(„Date scrise în fișier cu succes...”)

Rezultatul programului dvs. complet ar trebui să arate astfel:

Când deschideți testfile.txt fișier, veți vedea și noua linie atașată la sfârșitul fișierului, la fel ca în imaginea de mai jos:

Gestionarea fișierelor în Go este ușoară

Go vă permite să lucrați cu o varietate de fișiere, nu doar cu fișiere text. Există numeroase biblioteci și funcții încorporate suplimentare pentru a lucra cu diferite tipuri de date din fișiere, inclusiv JSON și CSV.

Pentru a vedea modul în care se comportă diferit în funcție de situație, puteți experimenta cu diferitele steaguri și permisiuni de fișiere care sunt disponibile pentru utilizare cu Deschide fișierul().