Проверяет понимание создания слайсов в Go с помощью make и разницы между длиной и ёмкостью.
В Go слайс — это динамическая структура данных, основанная на массиве. Функция make позволяет создать слайс с заданной длиной и ёмкостью, что даёт контроль над выделением памяти.
Вызов make([]T, length, capacity) создаёт слайс типа T с длиной length и ёмкостью capacity. Длина определяет количество доступных для чтения/записи элементов, а ёмкость — размер внутреннего массива. Если capacity не указан, он равен length.
// Слайс длины 5, ёмкость 5 (по умолчанию)
s := make([]int, 5)
fmt.Println(len(s), cap(s)) // 5 5
// Слайс длины 3, ёмкость 10
s2 := make([]int, 3, 10)
fmt.Println(len(s2), cap(s2)) // 3 10Указание ёмкости полезно, когда заранее известно примерное количество элементов. Это уменьшает количество переаллокаций при добавлении элементов через append.
// Без указания ёмкости: append может вызывать переаллокацию
s := make([]int, 0, 100) // ёмкость 100
for i := 0; i < 100; i++ {
s = append(s, i) // без переаллокации
}Если ёмкость не указана, append будет выделять новую память при превышении текущей ёмкости, что может снизить производительность.
Используйте make с явным указанием ёмкости для оптимизации работы с большими или предсказуемыми наборами данных. Это снижает накладные расходы на управление памятью и повышает эффективность кода.