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 begrenztReader: 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() Splitmit ScanLines/ScanWords/ScanRunes- Nach der Schleife
Err()prüfen - Für Token über 64 KB
Bufferverwenden
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.