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/CopyNtransmitem dadosMultiWriterduplica a saídaTeeReaderobserva a entradaMultiReaderune, eDiscardesvazia- 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
- A interface Reader
- A interface Writer
- Funções utilitárias de io
- Implementação de leitores personalizados