Sobes.tech
Junior — Middle

Ще повлияе ли оригиналният масив, ако предам копие на функция без указател?

sobes.tech AI

Отговор от AI

В Go, срезът (slice) е структура, която съдържа указател към масив, дължина и капацитет. Когато предадете срез към функция без указател, копира се самата структура на среза, но не и подлежащият масив.

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

Пример:

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]
}

Обобщение: предаването на срез без указател позволява да се променят елементите на оригиналния масив, но не позволява да се променя самият срез (неговата дължина, указател) извън функцията.