Trabalhando com o sistema de arquivos em Go: guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com o sistema de arquivos em Go: do básico às técnicas avançadas



Go (Golang) é uma linguagem de programação moderna conhecida por sua simplicidade e alta performance. Uma das tarefas essenciais que qualquer desenvolvedor enfrenta é trabalhar com o sistema de arquivos. Neste artigo, vamos detalhar como criar, ler, escrever arquivos, gerenciar diretórios e manipular caminhos em Go. Você terá exemplos práticos de código que o ajudarão a dominar o trabalho com arquivos de forma rápida e eficiente.



Pacotes principais para trabalhar com o sistema de arquivos



Em Go, o trabalho com o sistema de arquivos está concentrado em três pacotes principais da biblioteca padrão:

  • os — operações básicas: abrir, criar, excluir arquivos e diretórios.
  • io e io/ioutil — leitura e escrita de dados (nas versões mais recentes do Go, recomenda-se usar os em vez de ioutil).
  • path/filepath — manipulação de caminhos: combinar, dividir, obter extensões.


Antes de começar, certifique-se de importar os pacotes necessários:

package main

import ( "fmt" "os" "io" "path/filepath")


Leitura e escrita de arquivos em Go



Ler um arquivo inteiro

A maneira mais simples de ler um arquivo é usar a função os.ReadFile (disponível desde o Go 1.16). Ela retorna uma fatia de bytes e um erro.

func readFileExample() {    data, err := os.ReadFile("example.txt")    if err != nil {        fmt.Println("Erro ao ler o arquivo:", err)        return    }    fmt.Println(string(data))}


Escrever em um arquivo

Para escrever dados em um arquivo, use os.WriteFile. Se o arquivo não existir, ele será criado. Se existir, será sobrescrito.

func writeFileExample() {    content := []byte("Olá, mundo!Segunda linha.")    err := os.WriteFile("output.txt", content, 0644)    if err != nil {        fmt.Println("Erro ao escrever:", err)        return    }    fmt.Println("Arquivo escrito com sucesso")}


Leitura linha por linha de arquivos grandes

Para processar arquivos grandes, é melhor usar leitura com buffer para não carregar todo o arquivo na memória.

import "bufio"

func readLineByLine() { file, err := os.Open("large_file.txt") if err != nil { fmt.Println("Erro ao abrir:", err) return } defer file.Close()

scanner := bufio.NewScanner(file) for scanner.Scan() { line := scanner.Text() fmt.Println(line) } if err := scanner.Err(); err != nil { fmt.Println("Erro de escaneamento:", err) }}


Trabalhando com diretórios em Go



Criar e excluir diretórios

Para criar um único diretório, use os.Mkdir; para diretórios aninhados, use os.MkdirAll.

func createDirectories() {    // Criar uma única pasta    err := os.Mkdir("mydir", 0755)    if err != nil {        fmt.Println("Erro ao criar pasta:", err)    }

// Criar estrutura aninhada err = os.MkdirAll("path/to/nested/dir", 0755) if err != nil { fmt.Println("Erro ao criar pastas aninhadas:", err) }}


A exclusão de diretórios é feita com as funções os.Remove (para vazios) e os.RemoveAll (para não vazios).

func removeDirectories() {    // Excluir pasta vazia    err := os.Remove("mydir")    if err != nil {        fmt.Println("Erro ao excluir:", err)    }

// Excluir pasta com todo o conteúdo err = os.RemoveAll("path/to") if err != nil { fmt.Println("Erro ao excluir recursivamente:", err) }}


Ler o conteúdo de um diretório

A função os.ReadDir retorna uma lista de itens em um diretório.


                
                

Blogs

Book Recommendations