Что такое string или строки?
Строка в golang - это последовательность символов, которая представляет собой текстовые данные.
Строки в golang объявляются с типом string и заключаются в двойные кавычки, например:
1 | var s string = "hello" |
Строки в golang являются неизменяемыми(immutable), то есть их нельзя модифицировать после создания. Однако, можно создавать новые строки из существующих, используя различные операции и функции.
Например, можно склеивать строки с помощью оператора +, сравнивать строки с помощью оператора ==, или применять функции из пакета strings
для поиска, замены, преобразования и других манипуляций со строками.
Строки в golang хранят символы в кодировке UTF-8, которая поддерживает множество языков и специальных символов.
Каждый символ в строке называется руной (rune
), которая является псевдонимом для типа int32
. Руны можно получать из строк с помощью цикла for-range или функции range, а также преобразовывать в строки с помощью функции string
.
Источники:
Какие особенности есть у string?
Строка в golang - это неизменяемая последовательность символов в кодировке UTF-8, которая представляет собой текстовые данные. Строки в golang имеют тип string
и заключаются в двойные кавычки или обратные апострофы. Строки в golang поддерживают множество языков и специальных символов, включая русские буквы и эмодзи.
Строки в golang можно объединять, сравнивать, искать, заменять, преобразовывать и выполнять другие манипуляции с помощью различных функций из пакета strings
. Строки в golang также можно преобразовывать в руны (кодовые значения символов) и байты (единицы хранения данных) для более низкоуровневой работы с текстом
Как устроена строка внутри, а точнее reflect.String и reflect.StringHeader?
reflect.String - это псевдоним для типа string, который является неизменяемой последовательностью символов в кодировке UTF-8.
reflect.StringHeader - это структура, которая содержит два поля: Data и Len. Data - это указатель на первый байт строки, а Len - это длина строки в байтах. Структура reflect.StringHeader может быть получена из строки с помощью функции unsafe.Pointer, которая преобразует любое значение в указатель безопасного типа. Например, можно использовать такой код:
1 | s := "hello" |
Структура reflect.StringHeader может быть также использована для создания новой строки из существующей, изменяя ее указатель или длину. Например, можно использовать такой код:
1 | s := "hello, world!" |
Однако, такое использование reflect.StringHeader может быть опасным, так как оно нарушает неизменяемость строк и может привести к непредвиденным ошибкам или поведению. Например, если мы изменим длину строки больше, чем ее емкость, то мы можем получить доступ к памяти, которая не принадлежит строке, и вызвать панику или нарушение сегментации. Также, если мы изменим указатель на данные, то мы можем потерять ссылку на оригинальную строку и вызвать утечку памяти или сборку мусора.
Поэтому, reflect.String и reflect.StringHeader следует использовать с осторожностью и только в тех случаях, когда это необходимо для решения конкретной задачи. В большинстве случаев, можно обойтись стандартными функциями и методами для работы со строками в golang.
1 | var s string = "Let's" |
Напиши быструю инверсию строки(abc -> cba)
1 | // Package reverse can reverse things, particularly strings. |