0Pricing
Go Academy · Aula

Funções utilitárias de io

Use Copy, TeeReader e MultiWriter

Funções utilitárias de io é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 3 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.

A caixa de ferramentas io

O pacote io fornece pequenos auxiliares poderosos que combinam leitores e gravadores: Copy, TeeReader, MultiWriter e outros.

io.Copy

io.Copy(dst, src) transmite todos os bytes de um leitor para um gravador e retorna a quantidade.

package main

import (
	"fmt"
	"io"
	"os"
	"strings"
)

func main() {
	n, _ := io.Copy(os.Stdout, strings.NewReader("copied\n"))
	fmt.Println("bytes:", n)
}

io.CopyN

io.CopyN(dst, src, n) copia exatamente n bytes — útil para ler um prefixo de tamanho conhecido.

package main

import (
	"io"
	"os"
	"strings"
)

func main() {
	io.CopyN(os.Stdout, strings.NewReader("abcdef"), 3)
	os.Stdout.WriteString("\n")
}

io.MultiWriter

io.MultiWriter envia uma escrita para vários gravadores ao mesmo tempo — como o comando tee do Unix.

package main

import (
	"bytes"
	"fmt"
	"io"
	"os"
)

func main() {
	var buf bytes.Buffer
	w := io.MultiWriter(os.Stdout, &buf)
	io.WriteString(w, "to both\n")
	fmt.Println("buffer copy:", buf.String())
}

io.TeeReader

io.TeeReader(r, w) retorna um leitor que copia tudo o que lê para w — perfeito para registrar ou calcular o hash dos dados enquanto eles fluem.

package main

import (
	"bytes"
	"fmt"
	"io"
	"strings"
)

func main() {
	var spy bytes.Buffer
	tee := io.TeeReader(strings.NewReader("stream"), &spy)
	io.ReadAll(tee)
	fmt.Println("observed:", spy.String())
}

io.MultiReader

io.MultiReader concatena vários leitores em um único fluxo contínuo.

package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	r := io.MultiReader(strings.NewReader("Hello, "), strings.NewReader("World"))
	data, _ := io.ReadAll(r)
	fmt.Println(string(data))
}

io.Discard

io.Discard é um gravador que descarta tudo — útil para esvaziar um leitor de que você não precisa.

package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	n, _ := io.Copy(io.Discard, strings.NewReader("ignored"))
	fmt.Println("discarded:", n, "bytes")
}

Calculando hashes com TeeReader

Uma combinação clássica: leia um fluxo para sua finalidade real enquanto um TeeReader envia os mesmos bytes para um hash, permitindo calcular uma soma de verificação em uma única passagem.

io.Pipe

io.Pipe conecta um gravador a um leitor na memória, geralmente entre goroutines, para padrões de transmissão entre produtores e consumidores.

Escolhendo o auxiliar certo

  • Mover dados: Copy / CopyN
  • Duplicar a saída: MultiWriter
  • Observar a entrada: TeeReader
  • Unir entradas: MultiReader
  • Esvaziar a entrada: Discard

Componibilidade

Todos esses auxiliares usam io.Reader/io.Writer, portanto podem ser aninhados e encadeados livremente para criar fluxos de processamento sofisticados a partir de pequenas partes.

Verificação rápida

Teste seus conhecimentos sobre os utilitários de io.

Recapitulação

Você aprendeu os auxiliares utilitários de io.

  • Copy / CopyN transmitem dados
  • MultiWriter duplica a saída
  • TeeReader observa a entrada
  • MultiReader une, e Discard esvazia
  • Todos podem ser compostos por meio das interfaces Reader/Writer

Perguntas Frequentes

A aula “Funções utilitárias de io” é grátis?

Sim — o texto completo de “Funções utilitárias de io” é 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 “Funções utilitárias de io”?

Use Copy, TeeReader e MultiWriter 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 3 de 4.

Quanto tempo leva a aula “Funções utilitárias de io”?

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. A interface Reader
  2. A interface Writer
  3. Funções utilitárias de io
  4. Implementação de leitores personalizados
← Voltar para Go Academy