0Pricing
Go Academy · Lektion

Scanner

Zeile für Zeile lesen

Scanner ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist bufio.Scanner

bufio.Scanner ist die einfachste Möglichkeit, Eingaben Token für Token zu lesen, meistens Zeile für Zeile.

Er verbirgt die Pufferung und die Behandlung von Trennzeichen und entfernt den abschließenden Zeilenumbruch für Sie.

Zeilen scannen

Erstellen Sie einen Scanner und durchlaufen Sie ihn mit Scan(), das am Ende false zurückgibt. Lesen Sie das aktuelle Token mit 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())
	}
}

Wörter scannen

Legen Sie mit Split(bufio.ScanWords) die Aufteilungsfunktion fest, um die Eingabe nach Leerraum statt nach Zeilen in Token aufzuteilen.

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

Token zählen

Mit Scannern ist das Zählen unkompliziert. Hier zählen wir Wörter.

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 im Vergleich zu Text

Text() gibt eine Kopie als String zurück. Bytes() gibt den zugrunde liegenden Slice zurück, der beim nächsten Scan() wiederverwendet wird – kopieren Sie ihn, wenn Sie ihn behalten möchten.

package main

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

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

Runen scannen

bufio.ScanRunes teilt die Eingabe in UTF-8-Runen auf, also ein Token pro Zeichen.

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

Auf Fehler prüfen

Wenn Scan() false zurückgibt, kann das entweder das Ende der Eingabe oder ein Fehler sein. Rufen Sie nach der Schleife s.Err() auf, um beides zu unterscheiden.

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

Die Token-Größenbegrenzung

Standardmäßig darf ein einzelnes Token bufio.MaxScanTokenSize (64 KB) nicht überschreiten. Eine längere Zeile führt dazu, dass Scan() mit einem Fehler beendet wird.

Den Puffer vergrößern

Verwenden Sie Buffer(buf, max), um größere Token zuzulassen. Übergeben Sie einen initialen Puffer und eine maximale Größe.

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

Benutzerdefinierte Aufteilungsfunktionen

Eine Aufteilungsfunktion hat die Signatur func(data []byte, atEOF bool) (advance int, token []byte, err error). Sie können an Kommas, in Blöcken fester Breite oder an beliebigen anderen Stellen aufteilen.

Scanner im Vergleich zu Reader

  • Scanner: einfach, Token für Zeilen oder Wörter, entfernt Zeilenumbrüche automatisch, standardmäßig auf 64 KB begrenzt
  • Reader: vollständige Kontrolle, keine Größenbegrenzung, manuelle Behandlung von Trennzeichen

Verwenden Sie zuerst Scanner; wechseln Sie zu Reader, wenn Sie mehr Kontrolle benötigen.

Kurze Überprüfung

Testen Sie Ihr Wissen über Scanner.

Zusammenfassung

Sie haben gelernt, Eingaben mit bufio.Scanner Token für Token zu lesen.

  • Schleife mit Scan() + Text()/Bytes()
  • Split mit ScanLines/ScanWords/ScanRunes
  • Nach der Schleife Err() prüfen
  • Für Token über 64 KB Buffer verwenden

Häufig gestellte Fragen

Ist die Lektion „Scanner“ kostenlos?

Ja — der vollständige Text von „Scanner“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Scanner“?

Zeile für Zeile lesen Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Go Academy zu starten?

Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Scanner“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?

Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Gepufferte Reader
  2. Scanner
  3. Gepufferte Writer
  4. Große Dateien streamen
← Zurück zu Go Academy