Sobes.tech
Senior

Cosa mostrerà il codice con slice e passaggio a una funzione? Come funziona il passaggio di uno slice a una funzione?

sobes.tech AI

Risposta dell'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.

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