Senior
Ja es strādāju ar slice, to ņemu kā funkcijas parametru, ar to kaut ko daru un pēc funkcijas turpinu ar to strādāt — kam jāpievērš uzmanība? Kādus izmaiņas mēs neredzēsim no ārpuses?
sobes.tech AI
Atbilde no AI
Go valodā, šķēle (slice) ir struktūra, kas satur norādītāju uz masīvu, garumu un kapacitāti. Kad jūs nododat šķēli funkcijai, tiek kopēta tikai šī struktūra (norādītājs, garums, kapacitāte), nevis pats masīvs.
Svarīgi atcerēties:
- Izmaiņas šķēles elementos funkcijas iekšienē (piemēram,
s[0] = 10) būs redzamas ārpusē, jo tie norāda uz to pašu masīvu. - Izmaiņas pašā šķēles struktūrā (piemēram, piešķirot jaunu šķēli
s = append(s, 5)) neietekmēs šķēli ārpus funkcijas, jo tiek kopēta tikai struktūra.
Piemērs:
func modify(s []int) {
s[0] = 100 // mainīs masīva elementu — būs redzams ārpusē
s = append(s, 200) // mainīs vietējo šķēles kopiju — ārpusē neredzēs
}
s := []int{1, 2, 3}
modify(s)
fmt.Println(s) // Izvadīs [100 2 3], pievienošana 200 netiks atspoguļota
Īsumā, izmaiņas šķēles elementos ir redzamas ārpusē, bet izmaiņas garumā vai kapacitātē (caur append, slices) — nē, ja vien neatgriežat jaunu šķēli vai nepārsūtāt norādītāju uz šķēli.