Назад к вопросам
Intern
189
questionbank
Что такое тип данных string в языке Go и как он используется?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Тип данных string в Go представляет собой неизменяемую последовательность байт. В Go строки обрабатываются как слайсы байт, но с дополнительной гарантией неизменяемости.
Ключевые особенности:
- Неизменяемость: После создания строка не может быть изменена. Любая операция, которая выглядит как модификация строки, на самом деле создает новую строку.
- UTF-8 кодировка: Go по умолчанию использует UTF-8 для строк, что позволяет удобно работать с текстом на разных языках. Отдельные символы в строке (руны) могут занимать разное количество байт.
- Последовательность байт: Строка — это последовательность байт. Доступ по индексу
s[i]возвращает байт, а не руну. Для работы с рунами необходимо использовать[]rune(s)или циклfor range s. - Длина: Встроенная функция
len(s)возвращает количество байт в строке, а не количество символов (рун). - Синтаксис литералов: Строковые литералы заключаются в двойные кавычки
"..."или обратные кавычки для "сырых" строк\...``.
Использование:
// Объявление и инициализация
var s1 string = "hello"
s2 := "world"
// Конкатенация
s3 := s1 + " " + s2 // Создается новая строка
// Длина в байтах
byteLength := len(s3) // Количество байт
// Итерация по рунам
for i, r := range s3 {
// i - индекс начала руны в байтах
// r - руна (тип rune, который является псевдонимом int32)
//fmt.Printf("Index: %d, Rune: %c, Type: %T\n", i, r, r)
}
// Преобразование в слайс байт
byteSlice := []byte(s3)
// Преобразование в слайс рун
runeSlice := []rune(s3) // Удобно для работы с отдельными символами
// Доступ к байту по индексу (не руне!)
firstByte := s3[0] // byte 'h'
// Срез строки
substring := s3[6:] // Создается новая строка "world"
// Сравнение строк
if s1 == "hello" {
// Сравнение по содержимому
}