Go Básico: Manipulação de Arquivos

Todo desenvolvedor em algum momento já se deparou com a necessidade de manipular e escrever arquivos, não é mesmo? Em Go, existem algumas maneiras bem simples de resolvermos essa necessidade de forma rápida.

Para criar um novo arquivo e escrever algum conteúdo neste novo arquivo, podemos escrever o seguinte código.


package main

import (
	"fmt"
	"os"
)

func main() {
	//Creating a new file
	f, err := os.Create("test.txt")
	if err != nil {
		panic(err)
	}
	defer f.Close()

	//Writing to the new file.
	size, err := f.Write([]byte("Hello World!"))
	if err != nil {
		panic(err)
	}

	fmt.Printf("Size file: %d bytes", size)

	//If the content of your file is only text, you can opt for this other function.
	//size, err := f.WriteString("Hello World")
}

Agora que já criamos e escrevemos em um novo arquivo, podemos realizar a leitura deste arquivo com o seguinte código:


package main

import (
	"fmt"
	"os"
)

func main() {
	content, err := os.ReadFile("test.txt")
	if err != nil {
		panic(err)
	}
	fmt.Println(string(content))
}

Em casos em que o arquivo que estamos lendo é grande, precisamos utilizar outra solução, pois da forma acima estamos carregando todo o arquivo na memória. Se o arquivo for extenso, isso pode causar problemas e utilizar todos os recursos disponíveis.

Para solucionar isso, podemos ler o arquivo por partes da seguinte forma:


package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	content, err := os.Open("test.txt")
	if err != nil {
		panic(err)
	}
	reader := bufio.NewReader(content)
	buf := make([]byte, 5)

	for {
		n, err := reader.Read(buf)
		if err != nil {
			break
		}
		fmt.Printf("Size: %d bytes\n", n)
		fmt.Printf("Content: %s\n", buf[:n])
	}
}

Neste exemplo, configuramos para realizar a leitura de 5 bytes por vez.

Para finalizar, podemos utilizar o seguinte código para remover arquivos:


package main

import (
	"os"
)

func main() {
	err := os.Remove("test.txt")
	if err != nil {
		panic(err)
	}
}

Comentários

Postagens mais visitadas deste blog

Go Básico: Generics

Kotlin Básico: Tipos Básicos