Jako programovací jazyk má Go širokou škálu vestavěných funkcí, včetně schopnosti vytvářet, číst a zapisovat soubory, jako jsou textové (.txt) soubory.

Soubory jsou důležitou součástí našeho každodenního života v moderním světě. Textové soubory jsou užitečné pro ukládání strukturovaných lidsky čitelných dat bez použití externího softwaru nebo databází.

Pokud vás zajímá, jak byste mohli začít manipulovat s textovými soubory v Go, tento článek je pro vás tím správným místem.

Balíček bufio v Go

The bufio balíček, který je součástí standardní knihovny Go, se používá pro operace vstupu a výstupu s vyrovnávací pamětí, odtud název. The bufio balíček staví na io. Čtenář a io. Spisovatel rozhraní, která jsou široce používána při implementaci většiny standardních balíčků Go.

The bufio Balíček jde ještě o krok dále implementací ukládání do vyrovnávací paměti, takže je užitečný pro IO operace zahrnující textová data.

Chcete-li použít bufio balíček ve vašem programu, měli byste jej importovat spolu s ostatními balíčky.

instagram viewer
import (
"fmt"
"bufio"
)

Pravděpodobně jste slyšeli, když jste začal s Go že přichází se vším, co byste mohli jako programátor potřebovat. Pro přímou komunikaci s vaším operačním systémem existuje balíček tzv os který poskytuje funkce nezávislé na platformě.

The os a bufio balíčky neuvěřitelně zjednodušují manipulaci s textovými soubory.

Přestože naprostá většina os funkce balíčku jsou unixové, všechny využívají styl zpracování chyb Go, což usnadňuje čtení chybových zpráv a ladění kódu.

Jak tedy manipulujete se soubory obsahujícími text v Go?

Jak číst data z textového souboru

Chcete-li číst data z textových souborů, musíte zavolat na os balíček OTEVŘENO() funkce, která jako parametr přijímá jméno souboru, který se má číst. Další metodou, jak získat soubor, je použití Otevřít soubor() funkce.

Hlavní rozdíl mezi OTEVŘENO() a Otevřít soubor() je v jejich realizaci. OTEVŘENO() otevře soubor v režimu pouze pro čtení (s O_RDONLY vlajka), zatímco Otevřít soubor() poskytuje větší flexibilitu přijetím tří parametrů, a to:

  • Název souboru
  • Režim otevírání souboru: Platné režimy otevírání souboru jsou uvedeny v tabulce níže.
    Vlajka Význam
    O_RDONLY Otevře soubor v režimu pouze pro čtení
    O_WRONLY Otevře soubor v režimu pouze pro zápis
    O_RDWR Otevře soubor v režimu čtení a zápisu
    O_APPEND Při zápisu připojí data k souboru
    O_CREATE Vytvoří nový soubor, pokud žádný neexistuje
    O_EXCL Používá se s O_CREATE k označení, že soubor by měl být vytvořen pouze v případě, že neexistuje
    O_SYNC Otevře soubor pro synchronní I/O
    O_TRUNC Pokud je to možné, zkraťte soubor při otevření
  • Oprávnění k souboru: Stejné jako bity oprávnění souborů v Linuxu používá se pro specifikaci pravidel přístupu k souborům, např. 0777 pro udělení oprávnění ke čtení, zápisu a spouštění všem typům uživatelů.

Níže uvedený kód ukazuje, jak číst data z textového souboru v Go using os. OTEVŘENO(), a Skenovat() který v tomto případě běží v a Jděte do smyčky.

balík hlavní
import (
"bufio"
"fmt"
"log"
"os"
)
/**
OBSAH "testfile.txt" soubor.
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 hlavní(){
soubor, chyba := os. OTEVŘENO("testfile.txt")
// jiná metoda pomocí os. Otevřít soubor()
// soubor, err = os. Otevřít soubor("testfile.txt", os. O_RDONLY, 0644)
if err != nula {
log.Osudný(chybovat)
}
odložitsoubor.Zavřít()
fmt. Println("Soubor byl úspěšně otevřen. Nyní čteme obsah souboru řádek po řádku:")
// vytvořit skener z a soubornačísttextz
skener := bufio. NewScanner (soubor)
// skenování nebo čtení bajtů textu řádek po řádku
proskener.Skenovat() {
fmt.Println(skener.Text())
}
if err := skener. Chybovat(); chyba != nula {
log.Osudný(chybovat)
}
}

Když spustíte výše uvedený kód pomocí go spustit filename.go, vytváří výstup uvedený níže:

Pokud zadáte pouze název souboru a ne cestu k souboru OTEVŘENO() nebo Otevřít soubor() funkce pro operace čtení, Go předpokládá, že soubor je v aktuálním adresáři, a pokud jej nenajde, vrátí chybu. Pokud potřebujete pracovat se soubory mimo aktuální adresář, měli byste zadat cestu k souboru.

Jak zapisovat data do textového souboru

The bufio balíček poskytuje vyrovnávací paměť Spisovatel rozhraní, které ukládá bajty dat a zapisuje je do souboru pomocí a Flush() funkce.

Další ukázkový kód je pokračováním kódu pro čtení souboru. V tomto příkladu jsou data zapsána do existujícího testfile.txt za použití O_WRONLY a O_APPEND vlajky.

Přidejte následující řádky kódu do výše uvedeného programu před uzavírací složenou závorku hlavní() funkce:

// zápis výstupních dat do souboru
soubor, err = os. OpenFile("testfile.txt", os. O_APPEND|os. O_WRONLY, 0644)
-li chyba!= nula {
log. fatální (chyba)
}
odložit soubor. Zavřít()
fmt. Println("Soubor byl úspěšně otevřen, nyní se připravuje zápis dat do souboru...")
// vytvořit vyrovnávací objekt Writer pro zápis dat do souboru
textWriter := bufio. NewWriter (soubor)
// zapsat řetězec do vyrovnávací paměti před uložením souboru.
_, err = textWriter. WriteString("-Toto je a Nový text přidán do souboru.").
-li chyba!= nula {
log. fatální (chyba)
}
textwriter. Flush()
fmt. Println("Data byla úspěšně zapsána do souboru...")

Výstup vašeho kompletního programu by měl vypadat takto:

Když otevřete testfile.txt soubor, uvidíte také nový řádek připojený na konec souboru stejně jako obrázek níže:

Manipulace se soubory v Go je snadná

Go umožňuje pracovat s různými soubory, nejen s textovými soubory. Existuje mnoho dalších vestavěných knihoven a funkcí pro práci s různými typy dat ze souborů, včetně JSON a CSV.

Chcete-li zjistit, jak se chovají odlišně v závislosti na situaci, můžete experimentovat s různými příznaky a oprávněními souborů, které jsou k dispozici pro použití s Otevřít soubor().