Scanners
Leia linha por linha
Scanners é 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.
O que é bufio.Scanner
bufio.Scanner é a maneira mais fácil de ler a entrada unidade por unidade, geralmente linha por linha.
Ele oculta o uso da memória intermediária e o tratamento de delimitadores, além de remover a nova linha final para você.
Lendo linhas
Crie um scanner e faça um laço com Scan(), que retorna false ao chegar ao fim. Leia a unidade atual com Text().
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("one\ntwo\nthree"))
for s.Scan() {
fmt.Println("line:", s.Text())
}
}Lendo palavras
Defina a função de divisão com Split(bufio.ScanWords) para separar por espaços em branco em vez de linhas.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("the quick brown fox"))
s.Split(bufio.ScanWords)
for s.Scan() {
fmt.Println(s.Text())
}
}Contando unidades
Os scanners tornam a contagem trivial. Aqui, contamos palavras.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("a b c d e"))
s.Split(bufio.ScanWords)
count := 0
for s.Scan() {
count++
}
fmt.Println("words:", count)
}Bytes versus Text
Text() retorna uma cópia da cadeia de caracteres. Bytes() retorna a fatia subjacente, que é reutilizada na próxima chamada a Scan() — faça uma cópia dela se precisar mantê-la.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("data"))
s.Scan()
fmt.Println(len(s.Bytes()), "bytes")
}Lendo runas
bufio.ScanRunes divide a entrada em runas UTF-8, uma unidade por caractere.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("Gö"))
s.Split(bufio.ScanRunes)
for s.Scan() {
fmt.Printf("[%s]", s.Text())
}
fmt.Println()
}Verificando erros
O retorno false de Scan() pode significar EOF ou um erro. Depois do laço, chame s.Err() para distingui-los.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("ok\nfine"))
for s.Scan() {
fmt.Println(s.Text())
}
if err := s.Err(); err != nil {
fmt.Println("error:", err)
}
}O limite de tamanho da unidade
Por padrão, uma única unidade não pode exceder bufio.MaxScanTokenSize (64KB). Uma linha mais longa faz Scan() parar com um erro.
Aumentando a memória intermediária
Use Buffer(buf, max) para permitir unidades maiores. Passe uma memória intermediária inicial e um tamanho máximo.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("long line here"))
buf := make([]byte, 0, 1024)
s.Buffer(buf, 1024*1024)
for s.Scan() {
fmt.Println(s.Text())
}
}Funções de divisão personalizadas
Uma função de divisão tem a assinatura func(data []byte, atEOF bool) (advance int, token []byte, err error). Você pode dividir por vírgulas, larguras fixas ou qualquer outro critério.
Scanner versus Reader
Scanner: unidades simples de linha ou palavra, remove novas linhas automaticamente, limite padrão de 64KBReader: controle total, sem limite de tamanho, tratamento manual de delimitadores
Comece com Scanner; passe para Reader quando precisar de mais controle.
Verificação rápida
Verifique seus conhecimentos sobre Scanner.
Recapitulação
Você aprendeu a ler a entrada unidade por unidade com bufio.Scanner.
- Laço com
Scan()+Text()/Bytes() Splitcom ScanLines/ScanWords/ScanRunes- Verifique
Err()depois do laço - Use
Bufferpara unidades com mais de 64KB
Perguntas Frequentes
A aula “Scanners” é grátis?
Sim — o texto completo de “Scanners” é 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 “Scanners”?
Leia linha por linha 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 “Scanners”?
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.