Ohjelmointikielenä Gossa on laaja valikoima sisäänrakennettuja ominaisuuksia, kuten mahdollisuus luoda, lukea ja kirjoittaa tiedostoja, kuten tekstitiedostoja (.txt).

Tiedostot ovat tärkeitä osia jokapäiväisessä elämässämme nykymaailmassa. Tekstitiedostot ovat hyödyllisiä strukturoidun ihmisen luettavissa olevan tiedon tallentamiseen ilman ulkoisia ohjelmistoja tai tietokantoja.

Jos mietit, kuinka voit aloittaa tekstitiedostojen käsittelyn Gossa, tämä artikkeli on oikea paikka sinulle.

Bufio-paketti Gossa

The bufio pakettia, joka on osa Go: n standardikirjastoa, käytetään puskuroituihin syöttö- ja tulostustoimintoihin, mistä johtuu nimi. The bufio paketti perustuu io. Lukija ja io. Kirjailija rajapinnat, joita käytetään laajasti useimpien Go: n standardipakettien toteutuksessa.

The bufio paketti menee askeleen pidemmälle ottamalla käyttöön puskuroinnin, mikä tekee siitä hyödyllisen tekstidataa sisältäviin IO-toimintoihin.

Käyttääksesi bufio pakettia ohjelmassasi, sinun tulee tuoda se muiden pakettien rinnalle.

instagram viewer
tuonti (
"fmt"
"bufio"
)

Varmaan kuulit kun aloitti Golla että sen mukana tulee kaikki mitä saatat tarvita ohjelmoijana. Suoraan yhteydenpitoon käyttöjärjestelmäsi kanssa on paketti nimeltä os joka tarjoaa alustasta riippumattomia toimintoja.

The os ja bufio paketit tekevät tekstitiedostojen käsittelystä uskomattoman yksinkertaista.

Vaikka suurin osa os paketin toiminnot ovat Unix-tyyppisiä, ne kaikki käyttävät Go-tyyliä virheenkäsittelyssä, mikä tekee virheilmoitusten ja virheenkorjauskoodin lukemisesta helppoa.

Joten miten käsittelet tekstiä sisältäviä tiedostoja Gossa?

Kuinka lukea tietoja tekstitiedostosta

Jos haluat lukea tietoja tekstitiedostoista, sinun on soitettava numeroon os paketteja Avata() funktio, joka hyväksyy luettavan tiedoston nimen parametriksi. Toinen tapa saada tiedosto on käyttää Avaa tiedosto() toiminto.

Suurin ero Avata() ja Avaa tiedosto() on niiden täytäntöönpanossa. Avata() avaa tiedoston vain luku -tilassa ( O_RDONLY lippu), kun taas Avaa tiedosto() antaa lisää joustavuutta hyväksymällä kolme parametria, nimittäin:

  • Tiedoston nimi
  • Tiedoston avaustila: Kelvolliset tiedoston avaustilat näkyvät alla olevassa taulukossa.
    Lippu Merkitys
    O_RDONLY Avaa tiedoston vain luku -tilassa
    O_WRONLY Avaa tiedoston vain kirjoitustilassa
    O_RDWR Avaa tiedoston luku-kirjoitustilassa
    O_APPEND Lisää dataa tiedostoon kirjoitettaessa
    O_CREATE Luo uuden tiedoston, jos sellaista ei ole
    O_EXCL Käytetään O_CREATE: n kanssa osoittamaan, että tiedosto tulee luoda vain, jos sitä ei ole olemassa
    O_SYNC Avaa tiedoston synkronista I/O: ta varten
    O_TRUNC Katkaise tiedosto auki, jos mahdollista
  • Tiedoston käyttöoikeudet: Samat kuin tiedostojen käyttöoikeusbitit Linuxissa käytetään tiedostojen käyttösääntöjen määrittämiseen, esim. 0777 luku-, kirjoitus- ja suoritusoikeuksien myöntämiseen kaikille käyttäjätyypeille.

Alla oleva koodi näyttää, kuinka voit lukea tietoja tekstitiedostosta Go-sovelluksessa os. Avata(), ja Skannata() joka tässä tapauksessa toimii a Mene silmukalle.

paketti pää
tuonti (
"bufio"
"fmt"
"Hirsi"
"os"
)
/**
SISÄLTÖ "testitiedosto.txt" tiedosto.
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 pää(){
tiedosto, err := os. Avata("testitiedosto.txt")
// toinen menetelmä käyttää os. Avaa tiedosto()
// tiedosto, err = os. Avaa tiedosto("testitiedosto.txt", os. O_RDONLY, 0644)
jos err != nolla {
HirsiKohtalokas(err)
}
lykätätiedosto.Kiinni()
fmt. Println("Tiedosto avattiin onnistuneesti. Nyt luetaan tiedoston sisältö rivi riviltä:")
// luoda skanneri alkaen the tiedostotolukeatekstialkaen
skanneri := bufio. NewScanner (tiedosto)
// skannaa tai lue tekstin tavut rivi riviltä
vartenskanneri.Skannata() {
fmt.Println(skanneri.Teksti())
}
jos virhe := skanneri. Err(); err != nolla {
HirsiKohtalokas(err)
}
}

Kun suoritat yllä olevan koodin kanssa mene suorittamaan tiedostonimi.go, se tuottaa alla näkyvän tulosteen:

Jos annat vain tiedoston nimen etkä polkua Avata() tai Avaa tiedosto() toiminto lukutoimintoja varten, Go olettaa, että tiedosto on nykyisessä hakemistossa ja palauttaa virheilmoituksen, jos se ei löydä sitä. Sinun tulee välittää tiedoston polku, jos haluat käsitellä tiedostoja nykyisen hakemiston ulkopuolella.

Kuinka kirjoittaa tietoja tekstitiedostoon

The bufio paketti tarjoaa puskuroidun Kirjailija käyttöliittymä, joka tallentaa tavuja dataa ja kirjoittaa ne tiedostoon a Huuhtele () toiminto.

Seuraava esimerkkikoodi on jatkoa tiedoston lukukoodille. Tässä esimerkissä tiedot kirjoitetaan olemassa olevaan testitiedosto.txt käyttämällä O_WRONLY ja O_APPEND liput.

Lisää seuraavat koodirivit yllä olevaan ohjelmaan ennen sulkevaa aaltosulkua pää() toiminto:

// kirjoita lähtötiedot tiedostoon
tiedosto, err = os. OpenFile("testitiedosto.txt", os. O_APPEND|os. O_WRONLY, 0644)
jos virhe! = nolla {
Hirsi. Kohtalokas (err)
}
lykätä tiedosto. Kiinni()
fmt. Println("Tiedosto avattiin onnistuneesti, valmistellaan nyt tietojen kirjoittamista tiedostoon...")
// luo puskuroitu Writer-objekti tietojen kirjoittamiseksi tiedostoon
textWriter := bufio. NewWriter (tiedosto)
// kirjoita merkkijono puskuriin ennen tiedoston tallentamista.
_, err = textWriter. WriteString("-Tämä on a Uusi tekstiä lisätty tiedostoon.")
jos virhe! = nolla {
Hirsi. Kohtalokas (err)
}
tekstinkirjoittaja. Huuhtele ()
fmt. Println("Tiedostoon kirjoitetut tiedot onnistuneesti...")

Koko ohjelmasi tulosteen pitäisi näyttää tältä:

Kun avaat testitiedosto.txt tiedosto, näet myös uuden rivin liitettynä tiedoston loppuun aivan kuten alla olevassa kuvassa:

Tiedostojen käsittely Gossa on helppoa

Go antaa sinun käsitellä erilaisia ​​tiedostoja, ei vain tekstitiedostoja. On olemassa lukuisia sisäänrakennettuja lisäkirjastoja ja toimintoja erityyppisten tiedostojen, kuten JSON- ja CSV-tietojen, käsittelyyn.

Nähdäksesi, kuinka ne käyttäytyvät eri tavalla tilanteesta riippuen, voit kokeilla erilaisia ​​lippuja ja tiedostooikeuksia, jotka ovat käytettävissä Avaa tiedosto().