typestar

Leer líneas en Go

bufio.Scanner recorre un reader línea por línea, y su error hay que revisarlo.

func countLines(input string) (int, int, error) {
    scanner := bufio.NewScanner(strings.NewReader(input))
    scanner.Buffer(make([]byte, 0, 64*1024), 1024*1024)

    lines, words := 0, 0
    for scanner.Scan() {
        line := strings.TrimSpace(scanner.Text())
        if line == "" {
            continue
        }
        lines++
        words += len(strings.Fields(line))
    }
    if err := scanner.Err(); err != nil {
        return 0, 0, fmt.Errorf("scan: %w", err)
    }
    return lines, words, nil
}

Cómo funciona

  1. Scan devuelve false al final o ante un error.
  2. Err después distingue entre los dos casos.
  3. Buffer sube el límite para líneas muy largas.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
18
Caracteres a escribir
420
Tokens
129
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 74 segundos.

Escribe este fragmento

Paso 1 de 3 en Archivos e IO; paso 6 de 26 en Biblioteca estándar y estructura del proyecto.

← Anterior Siguiente →