Back to questions
2gis
Senior
5
Что такое слайс в Go? Чем отличается от массива? Что происходит при передаче слайса в функцию и изменении его элементов?
Companies where asked
Answer from AI
sobes.tech AI
Слайс (slice) в Go — это динамический, изменяемый по размеру представление последовательности элементов массива. В отличие от массива, который имеет фиксированную длину и размер, слайс содержит указатель на массив, длину и ёмкость.
Основные отличия слайса от массива:
- Массив имеет фиксированный размер, заданный при объявлении, например:
var arr [5]int. - Слайс — это структура, которая ссылается на часть массива, например:
var s []int. - Слайс можно расширять, изменять длину с помощью встроенных функций, массив — нет.
При передаче слайса в функцию передаётся копия структуры слайса (указатель на массив, длина, ёмкость), но не копируются сами элементы массива. Поэтому если внутри функции изменить элементы слайса (например, s[0] = 10), то изменения будут видны снаружи, так как слайс указывает на тот же массив.
Пример:
func modify(s []int) {
s[0] = 100
}
func main() {
arr := [3]int{1, 2, 3}
s := arr[:]
modify(s)
fmt.Println(arr) // Выведет [100 2 3]
}