0Pricing
Go Academy · Lección

Scanners

Lea línea por línea

Scanners es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

Qué es bufio.Scanner

bufio.Scanner es la forma más sencilla de leer una entrada token a token, normalmente línea por línea.

Oculta la gestión del búfer y de los delimitadores, y elimina por usted el salto de línea final.

Analizar líneas

Cree un scanner y, a continuación, use un bucle con Scan(), que devuelve false al llegar al final. Lea el token actual con 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())
	}
}

Analizar palabras

Establezca la función de división con Split(bufio.ScanWords) para dividir los tokens por espacios en blanco en lugar de por líneas.

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())
	}
}

Contar tokens

Los scanners hacen que contar sea trivial. Aquí contamos palabras.

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 frente a texto

Text() devuelve una copia de la cadena. Bytes() devuelve el slice subyacente, que se reutiliza en el siguiente Scan(); cópielo si necesita conservarlo.

package main

import (
	"bufio"
	"fmt"
	"strings"
)

func main() {
	s := bufio.NewScanner(strings.NewReader("data"))
	s.Scan()
	fmt.Println(len(s.Bytes()), "bytes")
}

Analizar runes

bufio.ScanRunes divide la entrada en runes UTF-8, un token por carácter.

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()
}

Comprobar errores

Que Scan() devuelva false puede significar EOF o un error. Después del bucle, llame a s.Err() para distinguirlos.

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)
	}
}

Límite de tamaño de los tokens

De forma predeterminada, un token individual no puede superar bufio.MaxScanTokenSize (64 KB). Una línea más larga hace que Scan() se detenga con un error.

Ampliar el búfer

Use Buffer(buf, max) para permitir tokens más grandes. Pase un búfer inicial y un tamaño 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())
	}
}

Funciones de división personalizadas

Una función de división tiene la firma func(data []byte, atEOF bool) (advance int, token []byte, err error). Puede dividir por comas, por anchos fijos o de cualquier otra forma.

Scanner frente a Reader

  • Scanner: sencillo, proporciona tokens de líneas o palabras, elimina automáticamente los saltos de línea y tiene un límite predeterminado de 64 KB
  • Reader: control total, sin límite de tamaño y con gestión manual de los delimitadores

Empiece por Scanner; recurra a Reader cuando necesite más control.

Comprobación rápida

Compruebe sus conocimientos sobre los scanners.

Recapitulación

Ha aprendido a leer entradas token a token con bufio.Scanner.

  • Bucle con Scan() + Text()/Bytes()
  • Split con ScanLines/ScanWords/ScanRunes
  • Compruebe Err() después del bucle
  • Use Buffer para tokens de más de 64 KB

Preguntas frecuentes

¿La lección «Scanners» es gratis?

Sí — el texto completo de «Scanners» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Scanners»?

Lea línea por línea Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Scanners»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Lectores con búfer
  2. Scanners
  3. Escritores con búfer
  4. Transmisión de archivos grandes
← Volver a Go Academy