← Назад ко всем вопросам

Что возвращает length для строки

1️⃣ Как кратко ответить

В Go функция len() возвращает количество байт в строке, а не количество символов.

2️⃣ Подробное объяснение темы

В языке программирования Go строки представляют собой последовательности байтов, а не символов. Это связано с тем, что строки в Go кодируются в формате UTF-8, где каждый символ может занимать разное количество байт. Например, символы латинского алфавита занимают 1 байт, а некоторые символы других языков или специальные символы могут занимать 2, 3 или даже 4 байта.

Функция len() в Go возвращает количество байт в строке, а не количество символов. Это важно учитывать, особенно при работе с многоязычными текстами, где символы могут занимать больше одного байта.

Пример:

package main
​
import (
	"fmt"
)
​
func main() {
	// Строка, содержащая только ASCII символы
	str1 := "Hello"
	// Строка, содержащая символы UTF-8
	str2 := "Привет"
​
	// Выводим длину строки str1
	fmt.Println(len(str1)) // Вывод: 5
​
	// Выводим длину строки str2
	fmt.Println(len(str2)) // Вывод: 12
}
  • В первой строке str1 := "Hello" создается строка, содержащая только ASCII символы. Каждый символ занимает 1 байт, поэтому len(str1) возвращает 5.
  • Во второй строке str2 := "Привет" создается строка, содержащая кириллические символы. Каждый из этих символов занимает 2 байта, поэтому len(str2) возвращает 12, хотя визуально в строке 6 символов.

Если необходимо получить количество символов в строке, а не байт, можно использовать руны. Руны в Go представляют собой символы Unicode и имеют фиксированный размер в 4 байта. Для подсчета количества символов в строке можно преобразовать строку в срез рун:

package main
​
import (
	"fmt"
)
​
func main() {
	str := "Привет"
​
	// Преобразуем строку в срез рун
	runes := []rune(str)
​
	// Выводим количество рун (символов) в строке
	fmt.Println(len(runes)) // Вывод: 6
}
  • В строке runes := []rune(str) строка преобразуется в срез рун, что позволяет корректно подсчитать количество символов.
  • len(runes) возвращает 6, что соответствует количеству символов в строке "Привет".

Таким образом, len() возвращает количество байт в строке, и для подсчета символов необходимо использовать руны.

Тема: Типы и коллекции
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки