Sobes.tech
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ų.