Go Academy · Lektion

Skannrar

Läs rad för rad

Lektion 2 av 413 steg

Skannrar är en gratis lektion i Go Academy på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Go Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Go Academy innehåller totalt 4 lektioner.

Vad är bufio.Scanner

bufio.Scanner är det enklaste sättet att läsa indata token för token, oftast rad för rad.

Den döljer buffring och hantering av avgränsare och tar automatiskt bort den avslutande radbrytningen åt er.

Skanna rader

Skapa en scanner och loopa sedan med Scan(), som returnerar false när indata är slut. Läs den aktuella 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())
	}
}

Skanna ord

Ange delningsfunktionen med Split(bufio.ScanWords) för att dela upp indata vid blanktecken i stället för radbrytningar.

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

Räkna token

Med scanners blir det enkelt att räkna. Här räknar 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 jämfört med text

Text() returnerar en kopia som sträng. Bytes() returnerar den underliggande slicen, som återanvänds vid nästa Scan() — kopiera den om ni behöver behålla innehållet.

package main

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

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

Skanna runor

bufio.ScanRunes delar upp indata i UTF-8-runor, en token per tecken.

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

Kontrollera fel

Att Scan() returnerar false kan betyda EOF eller ett fel. Anropa s.Err() efter loopen för att skilja dem åt.

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 för tokenstorlek

Som standard får en enskild token inte vara större än bufio.MaxScanTokenSize (64 KB). En längre rad gör att Scan() avbryts med ett fel.

Utöka bufferten

Använd Buffer(buf, max) för att tillåta större token. Skicka med en initial buffert och en maximal storlek.

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

Egna delningsfunktioner

En delningsfunktion har signaturen func(data []byte, atEOF bool) (advance int, token []byte, err error). Ni kan dela vid kommatecken, med fasta bredder eller på vilket annat sätt som helst.

Scanner jämfört med Reader

  • Scanner: enkelt, token för rader eller ord, tar automatiskt bort radbrytningar, standardgräns på 64 KB
  • Reader: full kontroll, ingen storleksgräns, manuell hantering av avgränsare

Börja med Scanner och gå över till Reader när ni behöver mer kontroll.

Snabb kontroll

Testa era kunskaper om scanners.

Sammanfattning

Ni har lärt er att läsa indata token för token med bufio.Scanner.

  • En loop med Scan() + Text()/Bytes()
  • Split med ScanLines/ScanWords/ScanRunes
  • Kontrollera Err() efter loopen
  • Använd Buffer för token som är större än 64 KB
Gratis att börja

Lär dig Go med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
51
Lektioner
203

Vanliga frågor

Är lektionen ”Skannrar” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Go Academy, inklusive ”Skannrar”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Go Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Skannrar”?

Läs rad för rad Ni övar på Go Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Go Academy?

Du behöver inga förkunskaper. Utbildningen i Go Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Skannrar”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Go Academy-lektionen?

Ja. Varje Go Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Buffrade läsare
  2. Skannrar
  3. Buffrade skrivare
  4. Strömma stora filer
← Tillbaka till Go Academy