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.