Что будет со слайсом, если его передать не по указателю в функцию, которая сортирует слайс и ничего не возвращает

«Что будет со слайсом, если его передать не по указателю в функцию, которая сортирует слайс и ничего не возвращает» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Пример:

func sortSlice(s []int) {
    sort.Ints(s)
}

func main() {
    s := []int{3, 1, 2}
    sortSlice(s) // изменяет оригинальный слайс
    fmt.Println(s) // [1 2 3]
}

Однако если функция изменяет длину или ёмкость (например, через append), изменения не отразятся на оригинальном слайсе. Для таких случаев нужен указатель.