Skip to content

Latest commit

 

History

History
129 lines (105 loc) · 3.03 KB

README.md

File metadata and controls

129 lines (105 loc) · 3.03 KB

ioutil Escrevendo em arquivo!

Dentro do pacote ioutil, Go fornece os métodos WriteFile, Write e WriteString.

No exemplo abaixo podemos ver o uso do método WriteFile. WriteFile grava os dados em um arquivo previamente nomeado. Se o arquivo não existir, WriteFile cria o arquivo, caso contrário WriteFile faz a sobreposição do arquivo existente.

package main

import (
	"bufio"
	"fmt"
	"io/ioutil"
	"os"
)


func main() {

	//Texto a ser gravado
	arquivo1 := []byte("Go \n Hands-On \n")

	/* EXEMPLO 1 */
	// Parm 1: nome do artquivo
	// Parm 2: conteúdo do arquivo
	// Parm 3: permissão de gravação ver os.FileMode
	erro1 := ioutil.WriteFile("arquivo1", arquivo1, 0644)
	if erro1 != nil {
		fmt.Println(erro1)
		/* Neste nosso exemplo vamos convencionar que a saída 3
		está reservada para erros de leitura e escrita em arquivos.
		IMPORTANTE: defers não serão executados quando utilizamos os.Exit(), 
		desta forma o programa principal será abortado imediatamente */
		os.Exit(3)
	}

...

Outros exemplos:

Também é possível apenas criar um novo arquivo vazio:

...
	/* EXEMPLO 2 */
	// Apenas criando um novo arquivo vazio
	arquivo2, erro2 := os.Create("arquivo2")
	if erro2 != nil {
		fmt.Println(erro2)
		os.Exit(3)
	}

	// Feche imediatamente assim que finalizar a função principal.
	defer arquivo2.Close()

	// slice de bytes a ser gravada
	dados := []byte{103, 111, 45, 104, 97, 110, 100, 115, 45, 111, 110}
	// neste caso não definimos o nome do arquivo a ser gravado
	// e a biblioteca utilizou o nome do arquivo do programa principal "ioutil_write"
	total1, erro3 := arquivo2.Write(dados)
	if erro3 != nil {
		fmt.Println(erro3)
		os.Exit(3)
	}

	// total1 recebe o total de bytes gravados
	fmt.Printf("%s \n", string(dados))
	fmt.Printf("gravados %d bytes \n", total1)
...

Bufferizando...

...
	/* EXEMPLO 3 */
	// Cria o arquivo
	arquivo3, erro4 := os.Create("arquivo3")
	if erro4 != nil {
		fmt.Println(erro4)
		os.Exit(3)
	}

	// Emita uma sincronização para liberar gravações para um armazenamento estável.
	// O pacote Sync fornece primitivas básicas de sincronização, tal como bloqueios de exclusão mútua (lock).
	arquivo3.Sync()
	// bufferiza
	w := bufio.NewWriter(arquivo3)
	total2, erro5 := w.WriteString("Go-Hands-On bufferizado \n")
	if erro5 != nil {
		fmt.Println(erro5)
		os.Exit(3)
	}

	fmt.Printf("gravados %d bytes \n", total2)
	// Flush garante que todos os dados foram encaminhados serão tratados pelo io.Writer.
	w.Flush()
	arquivo3.Close()
...	

Append....

...
	/* EXEMPLO 4 */
	// Abre o arquivo com a opção de append (acrescentar)
	arquivo, erro6 := os.OpenFile("arquivo3", os.O_APPEND|os.O_WRONLY, 0644)
	/* os.O_WRONLY - Essas solicitações abrem o arquivo somente leitura, somente gravação
	ou leitura / gravação, respectivamente. */
	if erro6 != nil {
		fmt.Println(erro6)
		os.Exit(3)
	}

	total3, erro7 := arquivo.WriteString("Go-Hands-On acrescentando")
	if erro7 != nil {
		fmt.Println(erro7)
		os.Exit(3)
	}

	fmt.Printf("gravados %d bytes \n", total3)
	arquivo.Close()

}