Sobes.tech
Back to questions
Senior
1

Что выведет код со слайсами и передачей в функцию? Как работает передача слайса в функцию?

Companies where asked
Flant

Answer from AI

sobes.tech AI

В Go слайсы передаются в функции по значению, но при этом копируется только структура слайса (указатель на массив, длина, ёмкость), а не сам underlying массив. Это значит, что изменения элементов слайса внутри функции отражаются на оригинальном массиве.

Пример:

func modify(slice []int) {
    slice[0] = 100
    slice = append(slice, 200) // изменяет локальный слайс, оригинал не меняется
}

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

Объяснение:

  • slice[0] = 100 меняет элемент в оригинальном массиве.
  • append может создать новый массив, если ёмкость недостаточна, но это не влияет на исходный слайс в main.

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