Ícone do site Tiago Temporin

Como manipular arquivos

Foto por Pixabay em Pexels.com

Em algum momento, muito provávelmente você irá manipular algum tipo de arquivo em seus programas. Nesse post vamos ver como criar, escrever, ler e remover arquivos em Go.

Criar e escrever

Para começar, vamos ver a forma mais simples e rápida para se criar e escrever dados em um arquivo.

data := []byte("Manipulando arquivos com Go")
if err := os.WriteFile("/tmp/aprendagolang1", data, 0644); err != nil {
    panic(err)
}

A função WriteFile do package os espera 3 argumentos. Caminho onde o arquivo será criado, o que é para escrever no arquivo e as permissões que o arquivo deve ter.

Se a permissão do arquivo não é algo importante, você pode fazer da seguinte forma:

file, err := os.Create("/tmp/aprendagolang2")
if err != nil {
    panic(err)
}
defer file.Close()

data := []byte("Manipulando arquivos com Go")
nb, err := file.Write(data) //nb == Número de Bytes
fmt.Printf("foram escritos %d bytes", nb)

Se o parâmetro da sua função vai receber for do tipo string, podemos mudar o file.Write por file.WriteString.

file, err := os.Create("/tmp/aprendagolang2")
if err != nil {
    panic(err)
}
defer file.Close()

nb, err := file.WriteString("Manipulando arquivos com Go")
fmt.Printf("foram escritos %d bytes", nb)

Ler

Ok, agora que já escrevemos, vamos ver como podemos ler esses arquivos para recuperar o conteúdo deles.

Seguindo a abordagem da escrita, vamos ver a forma mais simples para ler um arquivo inteiro.

data, err := os.ReadFile("/tmp/aprendagolang1")
if err != nil {
    panic(err)
}
fmt.Println(string(data))

Para arquivos muito grandes, essa abordagem pode não funcionar ou dar algum problema já que o arquivo será carregado inteiro para memória. Nesses casos podemos ler o arquivo por partes (chunks).

file, err := os.Open("/tmp/aprendagolang2")
if err != nil {
    panic(err)
}
defer file.Close()

reader := bufio.NewReader(file)
buf := make([]byte, 8)

for {
    nb, err := reader.Read(buf)
    if err != nil {
        if err != io.EOF {
            panic(err)
        }
        break
     }
     fmt.Print(string(buf[0:n]))
}

Como definimos em make([]byte, 8) esse código vai ler 8 bytes por vez. Caso você queira ler mais bytes por vez, é só mudar o 8 para o valor que desejar.

Remover

Por último, vamos ver como fazemos para remover um arquivo do nosso sistema.

err := os.Remove("/tmp/aprendagolang2")
if err != nil {
    panic(err)
}

Fácil, não?!

Deixem suas dúvidas nos comentários.

Até a próxima!


Faça parte da comunidade!

Receba os melhores conteúdos sobre Go, Kubernetes, arquitetura de software, Cloud e esteja sempre atualizado com as tendências e práticas do mercado.

* indicates required

Livros Recomendados

Abaixo listei alguns dos melhores livros que já li sobre GO.

Sair da versão mobile