0Pricing
Go Academy · Aula

Escrevendo arquivos e arquivos temporários

Use WriteFile, flags de OpenFile e arquivos temporários

Escrevendo arquivos e arquivos temporários é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.

os.WriteFile

os.WriteFile grava uma fatia de bytes em um arquivo de forma atômica (trunca e depois grava). É simples para arquivos pequenos.

err := os.WriteFile("output.txt", []byte("hello"), 0644)
if err != nil { log.Fatal(err) }

os.Create e defer Close

os.Create cria ou trunca um arquivo e retorna um *os.File. Sempre feche-o com defer.

f, err := os.Create("output.txt")
if err != nil { return err }
defer f.Close()
f.WriteString("hello\n")

os.OpenFile com sinalizadores

Use os.OpenFile para os modos de acréscimo, criação caso não exista ou criação exclusiva:

f, err := os.OpenFile("log.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)

bufio.Writer

Envolva um arquivo em bufio.NewWriter para agrupar pequenas gravações em chamadas de sistema maiores. Chame Flush() antes de fechá-lo para gravar todos os dados armazenados no buffer.

w := bufio.NewWriter(f)
fmt.Fprintf(w, "line %d\n", i)
w.Flush()

fmt.Fprintf

Grave texto formatado em qualquer io.Writer, inclusive em arquivos:

fmt.Fprintf(f, "name: %s, age: %d\n", name, age)

Padrão de gravação atômica de arquivos

Grave em um arquivo temporário e depois renomeie-o para o destino. Rename é atômico em POSIX; os leitores veem o arquivo antigo ou o novo, nunca uma gravação parcial.

tmp, _ := os.CreateTemp("", "output-*.txt")
tmp.Write(data)
tmp.Close()
os.Rename(tmp.Name(), "output.txt")

os.CreateTemp

os.CreateTemp(dir, pattern) cria um arquivo temporário em dir com um nome exclusivo que corresponde a pattern. Retorna o arquivo aberto. A exclusão é responsabilidade do chamador.

f, err := os.CreateTemp("", "upload-*.json")
defer os.Remove(f.Name()) // cleanup

os.MkdirTemp

os.MkdirTemp cria um diretório temporário. Use-o para recursos de teste ou para fluxos de processamento que criem vários arquivos temporários.

dir, err := os.MkdirTemp("", "batch-*")
defer os.RemoveAll(dir)

Permissões de arquivos

Passe os bits de permissão Unix (por exemplo, 0644 para leitura e gravação do proprietário e leitura do grupo e de outros usuários) como último argumento das funções no estilo de Create. A umask do processo pode restringi-los ainda mais.

Verificando erros de gravação

f.WriteString e fmt.Fprintf podem retornar erros (disco cheio ou permissões insuficientes). Verifique os erros ou acumule-os com um adaptador de escrita que registre o primeiro erro.

sync.File não é seguro para uso concorrente

Várias gorrotinas que gravam no mesmo *os.File simultaneamente podem intercalar as gravações. Use um bloqueio mútuo ou uma única gorrotina exclusiva de escrita.

Verificação rápida

Por que o padrão de gravar em um arquivo temporário e depois renomeá-lo é considerado atômico?

Resumo: gravação de arquivos

Pontos principais:

  • os.WriteFile: substituição simples; bufio.Writer: agrupa pequenas gravações
  • Gravação atômica: arquivo temporário + renomeação
  • os.CreateTemp / os.MkdirTemp para recursos temporários; sempre adie a limpeza
  • Verifique os erros de gravação; sincronize as gravações concorrentes

Perguntas Frequentes

A aula “Escrevendo arquivos e arquivos temporários” é grátis?

Sim — o texto completo de “Escrevendo arquivos e arquivos temporários” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.

O que vou aprender em “Escrevendo arquivos e arquivos temporários”?

Use WriteFile, flags de OpenFile e arquivos temporários Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Go Academy?

Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Escrevendo arquivos e arquivos temporários”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Go Academy?

Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Lendo arquivos com os e bufio
  2. Escrevendo arquivos e arquivos temporários
  3. Codificação e decodificação de JSON
  4. JSON e CSV em streaming
← Voltar para Go Academy