Go Academy · leksjon

strings.Builder

Bygg strenger effektivt

Leksjon 3 av 413 trinn

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:

  • WriteByte legger til én enkelt byte.
  • WriteRune legger 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, WriteRune eller fmt.Fprintf.
  • Du kan eventuelt bruke Grow på forhånd, lese én gang med String() 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())
}
Gratis å komme i gang

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

  1. Runer kontra bytes
  2. Funksjoner i strings-pakken
  3. strings.Builder
  4. Unicode og utf8
← Tilbake til Go Academy