Junior — Middle
Ovlivní pôvodný poľ, ak odovzdám kópiu do funkcie bez ukazovateľa?
sobes.tech AI
Odpoveď od AI
V Go je rez (slice) štruktúra, ktorá obsahuje ukazovateľ na pole, dĺžku a kapacitu. Keď odovzdáte rez funkcii bez ukazovateľa, kopíruje sa samotná štruktúra rezu, ale nie podkladové pole.
To znamená, že zmeny v prvkoch rezu vo vnútri funkcie ovplyvnia pôvodné pole, pretože oba rezy ukazujú na ten istý pole. Avšak, ak vo vnútri funkcie zmeníte samotný rez (napríklad mu priradíte nový rez alebo zmeníte jeho dĺžku), tieto zmeny nebudú mať vplyv na rez mimo funkcie.
Príklad:
func modifySlice(s []int) {
s[0] = 100 // zmení pôvodné pole
s = append(s, 200) // zmení lokálny rez, neovplyvní externý
}
func main() {
arr := []int{1, 2, 3}
modifySlice(arr)
fmt.Println(arr) // Vytlačí [100 2 3]
}
Zhrnutie: odovzdanie rezu bez ukazovateľa umožňuje meniť prvky pôvodného poľa, ale neumožňuje meniť samotný rez (jeho dĺžku, ukazovateľ) mimo funkcie.