Этот вопрос проверяет понимание базовых структур данных в Go — массивов и слайсов. Слайсы — это более гибкая альтернатива массивам, которая часто используется в реальных проектах.
Массивы в Go имеют фиксированный размер, определённый при создании, и их размер является частью типа. Слайсы, напротив, представляют собой динамическую структуру данных, которая позволяет изменять длину и предоставляет удобный способ работы с последовательностями элементов.
Массивы в Go — это фиксированные структуры данных, размер которых определяется во время объявления. Они имеют строго определённую длину, и изменение её невозможно. Например:
var arr [3]int = [3]int{1, 2, 3} // Массив длины 3Размер массива (3) включается в его тип, что делает его использование ограниченным, если требуется динамическое изменение размера.
Слайсы — это абстракция поверх массивов, предоставляющая более гибкую работу с последовательностями. Они поддерживают изменение длины и имеют три свойства:
Указатель на базовый массив.
Длина (len), определяющая количество элементов.
Ёмкость (cap), определяющая максимальное количество элементов, которые могут быть добавлены без перераспределения памяти.
Пример работы со слайсами:
package main
import "fmt"
func main() {
// Создание слайса
slice := []int{1, 2, 3}
fmt.Println("Слайс:", slice)
// Добавление элемента
slice = append(slice, 4)
fmt.Println("После добавления:", slice)
// Длина и ёмкость
fmt.Println("Длина:", len(slice), "Ёмкость:", cap(slice))
}Различия:
Размер: массивы имеют фиксированный размер, слайсы — динамический.
Гибкость: слайсы можно расширять с помощью функции append.
Тип: размер является частью типа массива, но не является частью типа слайса.
В каких случаях использовать:
Используйте массивы, когда нужен фиксированный размер и максимальная производительность.
Используйте слайсы для динамических коллекций данных.