Sobes.tech
Junior — Middle

Aké zmeny nastanú so slice-om vo vnútri funkcie, ak je odovzdaný hodnotou a funkcia sa zaoberá triedením a nevracia výsledok?

sobes.tech AI

Odpoveď od AI

В Go слайсы передаются в функции по значению, но важно понимать, что значение слайса — это структура, содержащая указатель на массив, длину и емкость. При передаче слайса по значению копируется именно эта структура, а не сам массив данных.

Если функция сортирует слайс, переданный по значению, и не возвращает результат, то изменения будут видны и снаружи, потому что указатель внутри слайса указывает на тот же массив данных.

Пример:

func sortSlice(s []int) {
    sort.Ints(s) // сортируем слайс
}

func main() {
    nums := []int{3, 1, 2}
    sortSlice(nums)
    fmt.Println(nums) // Выведет: [1 2 3]
}

Таким образом, сортировка внутри функции изменит исходный массив, даже если слайс передан по значению, потому что копируется только структура слайса, а не данные массива.