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!
Subscreva
Fique por dentro de tudo o que acontece no mundo Go.
[…] Se você quiser continuar lendo sobre manipulação de arquivos em Go, te convido a ler o post “Como manipular arquivos“. […]
Cara, esse artigo salvou minha vida, estou à 6h recebendo erro de permissionamento por um método diferente que estava usando, muito obrigado!
Feliz em saber que ajudou!!!