Como ler eficientemente um arquivo linha por linha em GO

Wechuli Paul 11 dezembro 2023 GO Go File
  1. Pacote e Importações Necessárias
  2. Ler linha por linha em Go
  3. Código completo para ler um arquivo linha a linha em Go
  4. Configurar o comportamento do Scanner em Go
Como ler eficientemente um arquivo linha por linha em GO

O arquivo I/O, especificamente leitura e escrita em arquivos é uma funcionalidade bastante comum das linguagens de programação. Muitas vezes, você precisa ler um arquivo linha por linha. GO fornece o pacote bufio que basicamente implementa o buffered I/O. O bufio fornece tipos e funções úteis, particularmente para leitura e escrita de arquivos de texto.

Pacote e Importações Necessárias

package main  import(  "fmt"  "bufio"  "log"  "os" ) 

Vamos precisar de várias importações da GO biblioteca padrão:-

  • os - para uma interface independente de plataforma para a funcionalidade do sistema operacional
  • fmt - implementando a funcionalidade de E/S formatada
  • log - pacote padrão de extração
  • bufio - suporta E/S tamponadas

Ler linha por linha em Go

Antes de ler o arquivo, ele precisa primeiro ser aberto utilizando a função os.Open() que retorna um tipo de ponteiro para o arquivo. O arquivo test.txt mostrado no trecho de código precisa existir previamente (coloque o caminho para onde seu arquivo está).

A função bufio.NewScanner(file) retorna um tipo de scanner que possui funções que suportam a leitura através do arquivo.

Para ler linha por linha no arquivo, precisamos utilizar dois métodos no novo Scanner, que avança o scanner para o novo token (neste caso a nova linha), e Text (ou Byte) que lê o token mais recente que foi gerado quando o Scan foi chamado.

Se algum erro foi encontrado ao ler o arquivo, ele pode ser manipulado por uma chamada para o método Err() no novo Scanner que retornará o primeiro erro não final do arquivo encontrado pelo Scanner.

func main(){  // open the file  file, err := os.Open("test.txt")   //handle errors while opening  if err != nil {  log.Fatalf("Error when opening file: %s", err)  }    fileScanner := bufio.NewScanner(file)   // read line by line  for fileScanner.Scan() {  fmt.Println(fileScanner.Text())  }  // handle first encountered error while reading  if err := fileScanner.Err(); err != nil {  log.Fatalf("Error while reading file: %s", err)  }   file.Close() } 

Código completo para ler um arquivo linha a linha em Go

O código completo em main.go para ler um arquivo linha por linha é fornecido abaixo.

Você precisa digitar:

 $ go run main.go 

para executar o programa no terminal.

package main  import (  "bufio"  "fmt"  "log"  "os" )  func main() {  // open the file  file, err := os.Open("test.txt")   //handle errors while opening  if err != nil {  log.Fatalf("Error when opening file: %s", err)  }   fileScanner := bufio.NewScanner(file)   // read line by line  for fileScanner.Scan() {  fmt.Println(fileScanner.Text())  }  // handle first encountered error while reading  if err := fileScanner.Err(); err != nil {  log.Fatalf("Error while reading file: %s", err)  }   file.Close() } 

Configurar o comportamento do Scanner em Go

O tipo Scanner tem uma função Split que aceita uma função SplitFunc para determinar como o scanner vai dividir a fatia de byte dada. O padrão SplitFunc é o ScanLines que retorna cada linha do texto, desnuda do marcador de fim de linha.

Por exemplo, poderíamos dividir utilizando palavras, como mostrado no trecho de código abaixo,

scanner.Split(bufio.ScanWords) //configure how the scanner behaves 
Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se