Back to questions
МВидео
Middle+
4
Чем отличается передача слайса и массива в функцию?
Companies where asked
Answer from AI
sobes.tech AI
В Go массивы и слайсы передаются в функции по-разному:
- Массивы передаются по значению, то есть копируются целиком. Изменения внутри функции не влияют на оригинальный массив.
- Слайсы — это структура, содержащая указатель на массив, длину и емкость. При передаче слайса копируется только эта структура (24 байта), но она указывает на тот же underlying массив. Поэтому изменения элементов слайса внутри функции отражаются на оригинальных данных.
Пример:
func modifyArray(arr [3]int) {
arr[0] = 100
}
func modifySlice(s []int) {
s[0] = 100
}
func main() {
a := [3]int{1, 2, 3}
modifyArray(a)
fmt.Println(a) // [1 2 3] - не изменился
s := []int{1, 2, 3}
modifySlice(s)
fmt.Println(s) // [100 2 3] - изменился
}
Таким образом, слайсы удобнее для передачи больших наборов данных, когда нужно изменять содержимое, а массивы — когда нужна копия.