Como ler eficientemente um arquivo linha por linha em GO
- Pacote e Importações Necessárias
- Ler linha por linha em Go
- Código completo para ler um arquivo linha a linha em Go
- Configurar o comportamento do
Scannerem 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 operacionalfmt- implementando a funcionalidade de E/S formatadalog- pacote padrão de extraçãobufio- 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