A interface Reader
O núcleo da E/S de Go
A interface Reader é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 1 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 essência da E/S do Go
io.Reader é uma interface que unifica todas as entradas no Go: arquivos, conexões de rede, cadeias de caracteres, fluxos compactados e muito mais.
O código que aceita um io.Reader funciona com qualquer fonte.
A definição da interface
O contrato é mínimo:
Read(p []byte) (n int, err error)
Ele preenche p com até len(p) bytes, retorna quantos foram lidos (n) e um erro.
Lendo de uma cadeia de caracteres
strings.NewReader transforma uma cadeia de caracteres em um io.Reader.
package main
import (
"fmt"
"strings"
)
func main() {
r := strings.NewReader("Hello")
buf := make([]byte, 5)
n, _ := r.Read(buf)
fmt.Printf("read %d bytes: %s\n", n, buf[:n])
}A regra de n e depois do erro
Uma chamada a Read pode retornar n > 0 bytes e um erro ao mesmo tempo. Processe sempre os n bytes primeiro e só depois verifique o erro.
Lendo em um laço
A maioria dos leitores precisa de um laço, porque uma única chamada a Read pode retornar menos bytes do que o solicitado.
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("abcdef")
buf := make([]byte, 2)
for {
n, err := r.Read(buf)
if n > 0 {
fmt.Printf("%s ", buf[:n])
}
if err == io.EOF {
break
}
}
fmt.Println()
}io.ReadAll
Quando os dados são pequenos e limitados, io.ReadAll lê tudo em uma fatia de bytes para você.
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("read it all")
data, _ := io.ReadAll(r)
fmt.Println(string(data))
}Leitores a partir de Bytes
bytes.NewReader envolve uma fatia de bytes, sendo útil quando você já tem os dados na memória.
package main
import (
"bytes"
"fmt"
"io"
)
func main() {
r := bytes.NewReader([]byte{72, 105})
data, _ := io.ReadAll(r)
fmt.Println(string(data))
}Funções que aceitam leitores
Escreva funções que recebam io.Reader, não tipos concretos. Assim, a mesma função pode ler de um arquivo, de um soquete ou de uma cadeia de caracteres de teste.
package main
import (
"fmt"
"io"
"strings"
)
func countBytes(r io.Reader) int {
data, _ := io.ReadAll(r)
return len(data)
}
func main() {
fmt.Println(countBytes(strings.NewReader("hello")))
}io.EOF não é um erro
Trate io.EOF como um sinal normal de que o fluxo terminou, não como uma falha. Somente os outros erros indicam problemas reais.
LimitReader
io.LimitReader(r, n) envolve um leitor para que ele pare depois de n bytes — útil para limitar quanto você lê.
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := io.LimitReader(strings.NewReader("abcdefgh"), 3)
data, _ := io.ReadAll(r)
fmt.Println(string(data))
}Por que uma única interface é vantajosa
- Desacopla o código das fontes de dados
- Facilita os testes com cadeias de caracteres e bytes
- Permite composição com envoltórios como LimitReader, gzip e outros
Verificação rápida
Verifique seus conhecimentos sobre io.Reader.
Recapitulação
Você aprendeu a interface de entrada principal.
Read(p []byte) (int, error)é todo o contrato- Faça um laço até
io.EOF; processe os n bytes primeiro io.ReadAll,strings/bytes.NewReader,LimitReader- Aceite
io.Readernas suas APIs
Perguntas Frequentes
A aula “A interface Reader” é grátis?
Sim — o texto completo de “A interface Reader” é 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 “A interface Reader”?
O núcleo da E/S de Go 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 1 de 4.
Quanto tempo leva a aula “A interface Reader”?
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