0Pricing
Go Academy · Aula

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.Reader nas 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

  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