Come linguaggio di programmazione, Go ha una vasta gamma di funzionalità integrate, inclusa la possibilità di creare, leggere e scrivere file come file di testo (.txt).

I file sono componenti importanti della nostra vita quotidiana nel mondo moderno. I file di testo sono utili per archiviare dati strutturati leggibili dall'uomo senza l'uso di software o database esterni.

Se ti stai chiedendo come iniziare a manipolare i file di testo in Go, questo articolo è il posto giusto per te.

Il pacchetto bufio in Go

IL bufio package, che fa parte della libreria standard di Go, viene utilizzato per operazioni di input e output bufferizzate, da cui il nome. IL bufio pacchetto si basa sul io. Lettore E io. scrittore interfacce, che sono ampiamente utilizzate nell'implementazione della maggior parte dei pacchetti standard di Go.

IL bufio package fa un ulteriore passo avanti implementando il buffering, rendendolo utile per le operazioni di IO che coinvolgono dati testuali.

Per usare il bufio pacchetto nel tuo programma, dovresti importarlo insieme ad altri pacchetti.

instagram viewer
importare (
"fmt"
"bufio"
)

Probabilmente hai sentito quando tu iniziato con Go che viene fornito con tutto ciò di cui potresti aver bisogno come programmatore. Per la comunicazione diretta con il tuo sistema operativo, c'è un pacchetto chiamato os che fornisce funzioni indipendenti dalla piattaforma.

IL os E bufio i pacchetti rendono la manipolazione dei file di testo incredibilmente semplice.

Sebbene la stragrande maggioranza dei os Le funzioni del pacchetto sono simili a Unix, utilizzano tutte lo stile Go di gestione degli errori, che semplifica la lettura dei messaggi di errore e il debug del codice.

Quindi, come si manipolano i file contenenti testo in Go?

Come leggere i dati da un file di testo

Per leggere i dati dai file di testo, è necessario chiamare il file os Pacchetti Aprire() funzione, che accetta come parametro il nome del file da leggere. Un altro metodo per ottenere il file consiste nell'utilizzare l'estensione Apri il file() funzione.

La principale differenza tra Aprire() E Apri il file() è nella loro attuazione. Aprire() apre un file in modalità di sola lettura (con l'estensione O_RDONLY bandiera), mentre Apri il file() offre maggiore flessibilità accettando tre parametri, vale a dire:

  • Nome del file
  • Modalità apertura file: le modalità di apertura file valide sono mostrate nella tabella sottostante.
    Bandiera Senso
    O_RDONLY Apre il file in modalità di sola lettura
    O_ERRAMENTE Apre il file in modalità di sola scrittura
    O_RDWR Apre il file in modalità lettura-scrittura
    O_APPEND Aggiunge i dati al file durante la scrittura
    O_CREA Crea un nuovo file se non esiste
    O_ESCL Utilizzato con O_CREATE, per indicare che il file deve essere creato solo se non esiste
    O_SINC Apre il file per l'I/O sincrono
    O_TRUNC Tronca il file all'apertura, se possibile
  • Autorizzazioni file: le stesse del file bit di autorizzazione dei file in Linux utilizzato per specificare le regole di accesso ai file, ad esempio 0777 per concedere autorizzazioni di lettura, scrittura ed esecuzione a tutti i tipi di utente.

Il codice seguente mostra come leggere i dati da un file di testo in Go using os. Aprire(), E Scansione() che in questo caso viene eseguito in a Vai per il ciclo.

pacchetto principale
importare (
"bufio"
"fmt"
"tronco d'albero"
"os"
)
/**
CONTENUTO DEL "filediprova.txt" file.
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
*/
funz principale(){
file, err := os. Aprire("filediprova.txt")
// un altro metodo che utilizza os. Apri il file()
// file, err = os. Apri il file("filediprova.txt", os. O_RDONLY, 0644)
se err != nil {
tronco d'albero.Fatale(errare)
}
differirefile.Vicino()
fmt. Stampaln("File aperto con successo. Ora leggendo il contenuto del file riga per riga:")
// creare scanner da IL fileALeggeretestoda
scanner := bufio. Nuovo scanner (file)
// scansiona o legge i byte di testo riga per riga
perscanner.Scansione() {
fmt.Stampaln(scanner.Testo())
}
se err := scanner. Err(); err!= zero {
tronco d'albero.Fatale(errare)
}
}

Quando esegui il codice sopra con vai a eseguire filename.go, produce l'output mostrato di seguito:

Se passi solo il nome del file e non il percorso del file Aprire() O Apri il file() funzione per le operazioni di lettura, Go presuppone che il file sia nella directory presente e restituisce un errore se non lo trova. Dovresti passare il percorso al file se hai bisogno di lavorare con file al di fuori della directory corrente.

Come scrivere dati in un file di testo

IL bufio pacchetto fornisce un buffered scrittore interfaccia che memorizza byte di dati e li scrive in un file con l'aiuto di a Sciacquone() funzione.

Il prossimo codice di esempio è una continuazione di quello per leggere un file. In questo esempio, i dati vengono scritti nell'esistente filediprova.txt usando il O_ERRAMENTE E O_APPEND bandiere.

Aggiungi le seguenti righe di codice al programma sopra, prima della parentesi graffa di chiusura del principale() funzione:

// scrive i dati di output nel file
file, err = os. OpenFile("testfile.txt", os. O_APPEND|os. O_ERRAMENTE, 0644)
Se errare!= zero {
tronco d'albero. Fatale (err)
}
differire file. Vicino()
fmt. Println("File aperto con successo, ora si prepara a scrivere i dati nel file...")
// crea un oggetto Writer bufferizzato per scrivere i dati nel file
textWriter := bufio. NewWriter (file)
// scrive la stringa nel buffer prima di salvare il file.
_, err = textWriter. WriteString("-Questo è un nuovo testo aggiunto al file.")
Se errare!= zero {
tronco d'albero. Fatale (err)
}
textWriter. Sciacquone()
fmt. Println("Dati scritti correttamente nel file...")

L'output del tuo programma completo dovrebbe essere simile a questo:

Quando apri il file filediprova.txt file, vedrai anche la nuova riga aggiunta alla fine del file proprio come l'immagine qui sotto:

La gestione dei file in Go è facile

Go ti consente di lavorare con una varietà di file, non solo file di testo. Esistono numerose librerie e funzioni integrate aggiuntive per lavorare con diversi tipi di dati da file, inclusi JSON e CSV.

Per vedere come si comportano in modo diverso a seconda della situazione, puoi sperimentare i vari flag e i permessi dei file che sono disponibili per l'uso con Apri il file().