strings.Builder
Bygg strenger effektivt
strings.Builder er en gratis leksjon i Go Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Go Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Go Academy inneholder totalt 4 leksjoner.
Kostnaden ved +-konkatenering
Fordi strenger er uforanderlige, oppretter hver s = s + part en helt ny streng og kopierer alle byte-ene på nytt.
I en løkke blir dette tregt og sløser med minne.
package main
import "fmt"
func main() {
s := ""
for i := 0; i < 3; i++ {
s = s + "go "
}
fmt.Println(s)
}Møt strings.Builder
strings.Builder utvider en intern buffer og unngår gjentatt kopiering. Du skriver til den og leser resultatet én gang til slutt.
Deklarer en med var b strings.Builder.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
b.WriteString("Hello")
fmt.Println(b.String())
}WriteString i en løkke
Den virkelige gevinsten vises i løkker. Kall WriteString gjentatte ganger, og les deretter én gang med String().
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
for i := 0; i < 3; i++ {
b.WriteString("go ")
}
fmt.Println(b.String())
}Skrive byte og runer
En Builder tar imot mer enn komplette strenger:
WriteBytelegger til én enkelt byte.WriteRunelegger til ett Unicode-kodepunkt.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
b.WriteString("Go")
b.WriteByte('!')
b.WriteRune('語')
fmt.Println(b.String())
}Builder implementerer io.Writer
Fordi Builder oppfyller io.Writer-grensesnittet, kan du bruke den med fmt.Fprintf til å formatere direkte inn i bufferen.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
fmt.Fprintf(&b, "x=%d y=%d", 3, 4)
fmt.Println(b.String())
}Sporing av lengde
b.Len() forteller deg hvor mange byte som er skrevet så langt, uten å bygge den endelige strengen.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
b.WriteString("hello")
fmt.Println(b.Len())
}Forhåndsallokering med Grow
Hvis du vet omtrent hvor stort resultatet blir, kan du først kalle b.Grow(n). Dette reserverer kapasitet og unngår gjentatt endring av bufferstørrelsen.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
b.Grow(64)
for i := 0; i < 5; i++ {
b.WriteString("item ")
}
fmt.Println(b.String())
}Tilbakestille en Builder
b.Reset() tømmer bufferen slik at du kan bruke den samme Builder-en på nytt for den neste strengen.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
b.WriteString("first")
b.Reset()
b.WriteString("second")
fmt.Println(b.String())
}Ikke kopier en Builder
En strings.Builder må ikke kopieres etter første gangs bruk. Send den rundt ved hjelp av en peker (*strings.Builder) i stedet.
package main
import (
"fmt"
"strings"
)
func add(b *strings.Builder, word string) {
b.WriteString(word)
}
func main() {
var b strings.Builder
add(&b, "shared ")
add(&b, "builder")
fmt.Println(b.String())
}Bygge en CSV-linje
Et praktisk eksempel: sett sammen en kommaseparert linje effektivt med en Builder.
package main
import (
"fmt"
"strings"
)
func main() {
fields := []string{"id", "name", "age"}
var b strings.Builder
for i, f := range fields {
if i > 0 {
b.WriteByte(',')
}
b.WriteString(f)
}
fmt.Println(b.String())
}Når bør du bruke en Builder?
Bruk strings.Builder når du setter sammen mange deler, særlig inne i løkker.
For en engangs-sammenføying av en kjent slice er strings.Join enklere og like rask.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
for i := 1; i <= 3; i++ {
fmt.Fprintf(&b, "[%d]", i)
}
fmt.Println(b.String())
}Kort kontroll
Hvorfor foretrekke en Builder fremfor gjentatt + i en løkke?
Oppsummering: strings.Builder
Du har lært å bygge strenger effektivt:
- Deklarer med
var b strings.Builder. - Legg til med
WriteString,WriteByte,WriteRuneellerfmt.Fprintf. - Du kan eventuelt bruke
Growpå forhånd, lese én gang medString()og aldri kopiere den.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
b.Grow(16)
b.WriteString("Go ")
b.WriteString("builder!")
fmt.Println(b.String())
}Lær deg Go med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 51
- Leksjoner
- 203
Ofte stilte spørsmål
Er leksjonen «strings.Builder» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Go Academy, inkludert «strings.Builder», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Go Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «strings.Builder»?
Bygg strenger effektivt Du øver på Go Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Go Academy?
Ingen tidligere erfaring er nødvendig. Go Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «strings.Builder»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Go Academy-leksjonen?
Ja. Alle Go Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Runer kontra bytes
- Funksjoner i strings-pakken
- strings.Builder
- Unicode og utf8