0Pricing
Go Academy · Lekcja

strings.Builder

Wydajnie twórz stringi

strings.Builder to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

Koszt konkatenacji za pomocą +

Ponieważ stringi są niezmienne, każde s = s + part tworzy zupełnie nowy string i ponownie kopiuje wszystkie bajty.

W pętli staje się to powolne i marnuje pamięć.

package main

import "fmt"

func main() {
    s := ""
    for i := 0; i < 3; i++ {
        s = s + "go "
    }
    fmt.Println(s)
}

Poznaj strings.Builder

strings.Builder powiększa wewnętrzny bufor i unika wielokrotnego kopiowania. Dane są zapisywane do bufora, a wynik odczytywany tylko raz na końcu.

Należy zadeklarować go za pomocą var b strings.Builder.

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    b.WriteString("Hello")
    fmt.Println(b.String())
}

WriteString w pętli

Prawdziwa korzyść jest widoczna w pętlach. Należy wielokrotnie wywoływać WriteString, a następnie raz odczytać wynik za pomocą 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())
}

Zapisywanie bajtów i runes

Builder przyjmuje nie tylko całe stringi:

  • WriteByte dodaje pojedynczy bajt.
  • WriteRune dodaje jeden punkt kodowy Unicode.
package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    b.WriteString("Go")
    b.WriteByte('!')
    b.WriteRune('語')
    fmt.Println(b.String())
}

Builder implementuje io.Writer

Ponieważ Builder spełnia interfejs io.Writer, można używać go z fmt.Fprintf, aby bezpośrednio formatować dane w buforze.

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    fmt.Fprintf(&b, "x=%d y=%d", 3, 4)
    fmt.Println(b.String())
}

Śledzenie długości

b.Len() informuje, ile bajtów zapisano do tej pory, bez tworzenia końcowego stringu.

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    b.WriteString("hello")
    fmt.Println(b.Len())
}

Wstępna alokacja za pomocą Grow

Jeśli wiadomo w przybliżeniu, jak duży będzie wynik, należy najpierw wywołać b.Grow(n). Rezerwuje to pojemność i pozwala uniknąć wielokrotnego zmieniania rozmiaru bufora.

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

Resetowanie Buildera

b.Reset() opróżnia bufor, dzięki czemu można ponownie użyć tego samego Buildera dla kolejnego stringu.

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    b.WriteString("first")
    b.Reset()
    b.WriteString("second")
    fmt.Println(b.String())
}

Nie kopiuj Buildera

Po pierwszym użyciu obiektu strings.Builder nie wolno kopiować. Należy przekazywać go za pomocą wskaźnika (*strings.Builder).

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

Budowanie wiersza CSV

Praktyczny przykład: wydajne złożenie wiersza rozdzielanego przecinkami za pomocą Buildera.

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

Kiedy używać Buildera

Warto sięgnąć po strings.Builder, gdy łączy się wiele fragmentów, szczególnie wewnątrz pętli.

W przypadku jednorazowego łączenia znanego wycinka strings.Join jest prostsze i równie szybkie.

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

Szybkie sprawdzenie

Dlaczego w pętli warto użyć Buildera zamiast wielokrotnego operatora +?

Podsumowanie: strings.Builder

Nauczyłeś się wydajnie budować stringi:

  • Deklaruj Builder za pomocą var b strings.Builder.
  • Dodawaj dane przez WriteString, WriteByte, WriteRune lub fmt.Fprintf.
  • Opcjonalnie wywołaj wcześniej Grow, raz odczytaj wynik za pomocą String() i nigdy nie kopiuj Buildera.
package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    b.Grow(16)
    b.WriteString("Go ")
    b.WriteString("builder!")
    fmt.Println(b.String())
}

Często zadawane pytania

Czy lekcja „strings.Builder” jest bezpłatna?

Tak — pełny tekst „strings.Builder” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „strings.Builder”?

Wydajnie twórz stringi Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „strings.Builder”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Runy a bajty
  2. Funkcje pakietu strings
  3. strings.Builder
  4. Unicode i utf8
← Powrót do Go Academy