Sobes.tech
Junior — Middle

Jak jest zorganizowana wewnętrzna struktura typu string w języku Go?

sobes.tech AI

Odpowiedź od AI

W języku Go, łańcuch (string) jest niezmiennym typem danych, który reprezentuje sekwencję bajtów zakodowanych w UTF-8. Wewnątrz łańcuch jest zaimplementowany jako struktura z dwoma polami:

  • wskaźnik na tablicę bajtów (slice bajtów), gdzie przechowywana jest zawartość łańcucha;
  • długość łańcucha (liczba bajtów).

Można to przybliżenie przedstawić tak:

// uproszczony obraz wewnętrznej struktury string
type stringStruct struct {
    ptr *byte  // wskaźnik na dane
    len int    // długość w bajtach
}

Ze względu na niezmienność łańcuchów, przy zmianach tworzona jest nowa kopia danych. Zapewnia to bezpieczeństwo i prostotę pracy z łańcuchami, ale wymaga uwagi przy częstych konkatenacjach (lepiej używać strings.Builder).

Ważne jest również, że długość jest przechowywana w bajtach, a nie w znakach Unicode, dlatego do pracy z znakami należy używać pakietu unicode/utf8.