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.ioeio/ioutil— leitura e escrita de dados (nas versões mais recentes do Go, recomenda-se usarosem vez deioutil).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
Leia também
Como calcular a diferença entre datas em C#: número de dias
Unchecked Cast em Kotlin: Como converter List<Any?> para List<Waypoint> com segurança
Registro em aplicações C#: melhores práticas na prática
Geração de números aleatórios no Android com Kotlin: o que está por baixo dos panos?
Cliente HTTP em Kotlin: fazendo requisições corretamente