Sobes.tech
Junior — Middle

Czy przekazanie kopii do funkcji bez wskaźnika wpłynie na oryginalną tablicę?

sobes.tech AI

Odpowiedź od AI

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

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

Пример:

func modifySlice(s []int) {
    s[0] = 100 // изменит исходный массив
    s = append(s, 200) // изменит локальный срез, не влияет на внешний
}

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

Итого: передача среза без указателя позволяет изменять элементы исходного массива, но не позволяет изменить сам срез (его длину, указатель) вне функции.