Дмитрий Нечаев
Len и Cap в Golang
В языке программирования Go (или Golang) функции len() и cap() часто используются для работы с коллекциями данных, такими как массивы, срезы и каналы. В этой статье мы рассмотрим, что представляют собой эти функции, их назначение и как правильно их использовать.
Понимание len и cap является важным шагом в освоении Go, но это лишь верхушка айсберга. Чтобы писать эффективный и безопасный код, необходимо глубокое понимание принципов работы с памятью, слайсами и массивами. Если вы хотите детальнее погрузиться в тонкости работы с этими структурами данных, их оптимизацию и обработку ошибок, приходите на наш большой курс Основы Golang. На курсе 193 уроков и 16 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Функция len()
Функция len() в Go возвращает количество элементов в коллекции. Эта функция применяется к массивам, срезам, строкам и картам. Давайте рассмотрим примеры использования функции len():
Массивы
Для массивов функция
len()возвращает фиксированное количество элементов:package main import "fmt" func main() { nums := [5]int{1, 2, 3, 4, 5} fmt.Println("Длина массива:", len(nums)) // Вывод: 5 }Здесь
len(nums)возвращает значение5, так как массивnumsсодержит пять элементов.Срезы
Для срезов функция
len()также возвращает количество элементов, содержащихся в срезе:package main import "fmt" func main() { nums := []int{10, 20, 30, 40, 50} fmt.Println("Длина среза:", len(nums)) // Вывод: 5 }В этом примере срез
numsтакже имеет длину5.Строки
Для строк функция
len()возвращает количество байтов в строке:package main import "fmt" func main() { str := "Привет" fmt.Println("Длина строки:", len(str)) // Вывод: 12 (так как каждый символ занимает несколько байт) }Здесь
len(str)возвращает12, так как строка кодируется в UTF-8 и каждый символ может занимать больше одного байта.
Функция cap()
Функция cap() возвращает емкость коллекции, то есть максимальное количество элементов, которые могут быть размещены в этой коллекции. Эта функция используется для массивов, срезов и каналов.
Массивы
Для массивов емкость всегда равна их длине, так как массивы имеют фиксированный размер:
package main import "fmt" func main() { nums := [5]int{1, 2, 3, 4, 5} fmt.Println("Емкость массива:", cap(nums)) // Вывод: 5 }Срезы
Для срезов емкость — это количество элементов от начала среза до конца базового массива. Рассмотрим пример:
package main import "fmt" func main() { nums := []int{10, 20, 30, 40, 50} subSlice := nums[1:4] fmt.Println("Длина subSlice:", len(subSlice)) // Вывод: 3 fmt.Println("Емкость subSlice:", cap(subSlice)) // Вывод: 4 }В этом примере длина
subSliceравна3, так как он содержит элементы с индексами1,2и3из массиваnums. ЕмкостьsubSliceравна4, так как она включает все элементы отnums[1]доnums[4].
Различия между len() и cap()
len()возвращает количество элементов в коллекции, которые в данный момент доступны.cap()возвращает общую емкость коллекции, то есть максимальное количество элементов, которое коллекция может содержать без расширения.
Применение len() и cap() в практике
Функции len() и cap() часто используются при работе с динамическими данными, чтобы отслеживать размеры коллекций и при необходимости управлять ими. Например, функция append() для добавления элементов в срез может увеличивать его емкость, если она не достаточна для размещения новых данных.
Заключение
Функции len() и cap() в Go являются важными инструментами для работы с коллекциями данных. len() позволяет определить количество элементов, а cap() — емкость среза или массива. Эти функции помогают эффективно управлять данными и понимать структуру коллекций в Go. В следующей статье мы подробнее рассмотрим, как изменять и расширять срезы в Go для более гибкой работы с данными.
Знание len и cap - это только начало пути к мастерству в Go. Чтобы создавать по-настоящему эффективные приложения, вам потребуется глубокое понимание структур данных, алгоритмов и способов оптимизации кода. Все это, и даже больше, вы найдете на нашем курсе Основы Golang. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир Go прямо сегодня и станьте уверенным разработчиком.
Постройте личный план изучения Golang до уровня Middle — бесплатно!
Golang — часть карты развития Backend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Golang
Лучшие курсы по теме

Основы Golang
Антон Ларичев
Nest.js с нуля
Антон Ларичев