Junior — Middle
Kaip perduodamas slice į funkciją programavimo kalboje?
sobes.tech AI
Atsakymas iš AI
Go kalboje, sluoksnis (slice) perduodamas funkcijai pagal reikšmę, tačiau sluoksnis turi nuorodą į masyvą, taip pat jo ilgį ir talpą. Tai reiškia, kad perduodant sluoksnį į funkciją, kopijuojama sluoksnio struktūra, bet ne duomenys, į kuriuos jis nurodo.
Dėl to, pakeitimai sluoksnio elementuose funkcijos viduje atsispindi originaliame masyve, tačiau pačios sluoksnio (pvz., priskiriant naują sluoksnį) keitimas neturi įtakos išoriniam sluoksniui.
Pavyzdys:
package main
import "fmt"
func modifySlice(s []int) {
s[0] = 100 // pakeis originalaus masyvo elementą
s = append(s, 200) // pakeis lokalų sluoksnį, išorinis nesikeis
}
func main() {
s := []int{1, 2, 3}
modifySlice(s)
fmt.Println(s) // Išves: [100 2 3]
}
Taip, sluoksnis perduodamas pagal reikšmę, tačiau dėl vidinio nuorodinio elemento, pakeitimai matomi už funkcijos ribų.