Ще повлияе ли оригиналният масив, ако предам копие на функция без указател?
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]
}
Обобщение: предаването на срез без указател позволява да се променят елементите на оригиналния масив, но не позволява да се променя самият срез (неговата дължина, указател) извън функцията.