Я запутался в типах данных array
и slice
.
В Go документах массивы описываются следующим образом:
Существуют серьезные различия между методами работы массивов в Go и C. В Go
- Массивы являются значениями. Присвоение одного массива другому копирует все элементы.
- В частности, если вы передадите массив функции, он получит копию массива, а не указатель на него.
- Размер массива является частью его типа. Типы [10] int и [20] int различны.
Функции:
Как и во всех языках семейства C, все в Go передается по значению. То есть функция всегда получает копию передаваемой вещи, как если бы существовал оператор присваивания, присваивающий значение параметру. Например, передача значения int в функцию делает копию int, а передача значения указателя - копию указателя, но не данных, на которые он указывает.
Почему sort.Ints(arrayValue)
изменяет переданную переменную, когда я объявил ее как массив, а не как срез?
Код
var av = []int{1,5,2,3,7}
fmt.Println(av)
sort.Ints(av)
fmt.Println(av)
return
Выход
[1 5 2 3 7]
[1 2 3 5 7]