Senior
Was ist ein Slice in Go? Worin unterscheidet es sich von einem Array? Was passiert, wenn man einen Slice an eine Funktion übergibt und seine Elemente ändert?
sobes.tech KI
Antwort von 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]
}