Sobes.tech
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 — руна
}