Senior
Wat is een slice in Go? Hoe verschilt het van een array? Wat gebeurt er als je een slice doorgeeft aan een functie en de elementen ervan wijzigt?
sobes.tech AI
Antwoord van 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]
}