Pular para o conteúdo principal

victorstein.dev

23/100 Dias de Golang - Manipulação de arquivos

Table of Contents

# Manipulação de arquivos

Clássico conteúdo de manipulação de arquivos, como fazer a leitura, como escrever, como escreve com append, como ler linha a linha, como renomear um arquivo, como deletar… O famoso CRUD dos arquivos.

# Criar e escrever

Para criar um arquivo, vamos usar a função os.Create(nomeArquivo) da biblioteca padrão os.

nomeArquivo := "meu_arquivo.txt"

arquivo, err := os.Create(nomeArquivo)
if err != nil {
	panic(err)
}

Lembrar de sempre quando trabalhar com arquivos usar o defer. O defer atrasa a execução da função que o segue até que a função em que ele está seja concluída. No caso de arquivo.Close(), isso garante que o arquivo será fechado corretamente, independentemente de como a função termina. O mais legal é que isso é independente de como a função finaliza, seja com com um erro o de forma normal.

defer arquivo.Close()

Agora com o arquivo criado, vamos escrever uma mensagem nele com a função WriteString(), passando uma string como parâmetro.

conteudo := "Olá, Golang!\nAcesse o victorstein.dev para mais conteúdos\n"

_, err = arquivo.WriteString(conteudo)
if err != nil {
	log.Fatalf("Erro ao escrever no arquivo %s: %v\n", nomeArquivo, err)
}

# Deletar

Para deletar um arquivo, vamos usar a função os.Remove(nomeArquivo) da biblioteca padrão os.

err := os.Remove(nomeArquivo)
if err != nil {
	panic(err)
}

# Ler o arquivo

Para ler o arquivo, vamos usar a função os.ReadFile(nomeArquivo).

conteudoBytes, err := os.ReadFile(nomeArquivo)
if err != nil {
	panic(err)
}
print(string(conteudoBytes))

# Atualizar o arquivo

Vamos fazer uma análise desse programa:

nomeArquivo := "meu_arquivo.txt"

novoConteudo := "Este é o conteúdo ATUALIZADO.\nTodo o conteúdo anterior foi substituído.\n"

arquivo, err := os.OpenFile(nomeArquivo, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil {
	log.Fatalf("Erro ao abrir o arquivo %s para sobrescrita: %v\n", nomeArquivo, err)
}
defer arquivo.Close()

_, err = arquivo.WriteString(novoConteudo)

Veja que aqui abrimos o arquivo com a função os.OpenFile().Ela serve para abrir ou criar um arquivo com controle detalhado sobre o modo de acesso e as permissões. Com essa função temos maior nível de detalhe e controle ao arquivo, definimos exatamente como o arquivo será acessado usando as flags (os.O_RDONLY para somente leitura, os.O_WRONLY para escrita, os.O_RDWR para leitura/escrita, os.O_APPEND para anexar, os.O_CREATE para criar, os.O_TRUNC para truncar, esvaziar um arquivo).