Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: string, rune, byte, UTF-8, immutable, slice

Расскажите всё, что знаете о строках в Go.

Вопрос проверяет понимание устройства строк в Go, их неизменяемости, работы с Unicode и эффективного использования.

Короткий ответ

Строка в Go — это неизменяемая последовательность байт, обычно представляющая текст в кодировке UTF-8. Она может содержать любые байты, включая нулевые. Для работы с символами Unicode используется тип rune (int32). Строки поддерживают срезы, конкатенацию и сравнение, но не поддерживают прямое изменение символов.

Длинный ответ

Основы строк в Go

Строка в Go — это неизменяемая последовательность байт. Внутренне она представлена структурой, содержащей указатель на массив байт и длину. Строки могут содержать любые байты, включая нулевые, и не обязаны быть валидным UTF-8. Однако по соглашению строки обычно содержат текст в кодировке UTF-8.

Неизменяемость

Строки неизменяемы: после создания изменить отдельные символы нельзя. Любая операция, которая кажется изменяющей строку (например, конкатенация), создает новую строку. Это обеспечивает безопасность и упрощает работу с памятью.

s := "hello"
// s[0] = 'H' // Ошибка: нельзя изменить
s2 := "H" + s[1:] // Создаем новую строку

Работа с Unicode и rune

Для работы с символами Unicode используется тип rune (алиас для int32). Цикл for range по строке итерирует по рунам, а не по байтам. Это важно для корректной обработки многобайтовых символов.

s := "Привет"
for i, r := range s {
    fmt.Printf("%d: %c\n", i, r)
}
// Вывод: 0: П, 2: р, 4: и, 6: в, 8: е, 10: т

Строки как срезы байт

Строку можно преобразовать в срез байт ([]byte) и обратно. Это полезно для модификации данных, но требует копирования, так как строки неизменяемы.

b := []byte("hello")
b[0] = 'H'
s := string(b) // "Hello"

Производительность

Конкатенация строк через оператор + может быть неэффективной для большого количества операций, так как создает новые строки. Для частой конкатенации используйте strings.Builder.

var sb strings.Builder
for i := 0; i < 1000; i++ {
    sb.WriteString("a")
}
s := sb.String()

Вывод

Строки в Go — это простой и безопасный способ работы с текстом, основанный на неизменяемости и UTF-8. Их следует использовать для хранения и передачи текстовых данных, а для сложных манипуляций с символами применять rune и strings.Builder.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • Golang

    Golang

Ключевые слова

#string

#rune

#byte

#UTF-8

#immutable

#slice

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.