Back to questions
Senior
6
Строка в Go — что такое, как организована под капотом?
Companies where asked
.wrk
Answer from AI
sobes.tech AI
В Go строка (string) — это неизменяемая последовательность байт, обычно представляющая текст в кодировке UTF-8. Под капотом строка устроена очень просто: это структура с указателем на массив байт и длиной.
Типично, строка в Go выглядит как:
// упрощённо
type stringHeader struct {
Data uintptr // указатель на данные
Len int // длина в байтах
}
Из-за неизменяемости любые операции, изменяющие строку, создают новый массив байт. Это позволяет эффективно передавать строки по значению без копирования данных — копируется только указатель и длина.
Важно:
- Строка хранит байты, а не символы Unicode. Для работы с символами (рунами) нужно использовать пакет
unicode/utf8. - Из-за UTF-8 символы могут занимать разное количество байт.
Пример:
s := "Привет"
fmt.Println(len(s)) // количество байт
for i, r := range s {
fmt.Printf("%d: %c\n", i, r) // i — индекс байта, r — руна
}