Scannere
Læs linje for linje
Scannere er en gratis Go Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Go Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Go Academy-kurset indeholder 4 lektioner i alt.
Hvad er bufio.Scanner
bufio.Scanner er den nemmeste måde at læse input token for token, oftest linje for linje.
Den skjuler buffering og håndtering af afgrænsningstegn og fjerner det afsluttende linjeskift for dig.
Scanne linjer
Opret en scanner, og kør derefter en løkke med Scan(), som returnerer false ved slutningen. Læs det aktuelle token med 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())
}
}Scanne ord
Angiv splitfunktionen med Split(bufio.ScanWords) for at opdele efter blanktegn i stedet for linjer.
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())
}
}Tælle token
Med scanners er det enkelt at tælle. Her tæller vi ord.
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)
}Byte sammenlignet med tekst
Text() returnerer en kopi af en streng. Bytes() returnerer den underliggende slice, som genbruges ved det næste kald til Scan() — kopiér den, hvis du skal gemme den.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("data"))
s.Scan()
fmt.Println(len(s.Bytes()), "bytes")
}Scanne runer
bufio.ScanRunes opdeler inputtet i UTF-8-runer, ét token pr. tegn.
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()
}Kontrollere fejl
Hvis Scan() returnerer false, kan det betyde EOF eller en fejl. Kald s.Err() efter løkken for at skelne mellem dem.
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)
}
}Grænsen for tokenstørrelse
Som standard må ét token ikke overskride bufio.MaxScanTokenSize (64 KB). En længere linje får Scan() til at stoppe med en fejl.
Udvide bufferen
Brug Buffer(buf, max) for at tillade større token. Angiv en startbuffer og en maksimal størrelse.
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())
}
}Brugerdefinerede splitfunktioner
En splitfunktion har signaturen func(data []byte, atEOF bool) (advance int, token []byte, err error). Du kan opdele ved kommaer, med faste bredder eller på hvad som helst.
Scanner sammenlignet med Reader
Scanner: enkel, token for linjer eller ord, fjerner automatisk linjeskift, standardgrænse på 64 KBReader: fuld kontrol, ingen størrelsesgrænse, manuel håndtering af afgrænsningstegn
Start med Scanner, og skift til Reader, når du har brug for mere.
Hurtig test
Test din viden om Scanner.
Opsummering
Du har lært at læse input token for token med bufio.Scanner.
- Løkke med
Scan()+Text()/Bytes() Splitmed ScanLines/ScanWords/ScanRunes- Kontrollér
Err()efter løkken - Brug
Buffertil token over 64 KB
Lær Go med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “Scannere” gratis?
Ja — alle 3 lektioner i læringssporet Go Academy, inklusive “Scannere”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Go Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Scannere”?
Læs linje for linje Du øver dig i Go Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Go Academy?
Der kræves ingen tidligere erfaring. Go Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Scannere”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Go Academy-lektion?
Ja. Alle Go Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.