Sobes.tech
Junior — Middle

Kādus datus iekšā slice tiek nodoti, izsaucot funkciju ar šo slice kā argumentu?

sobes.tech AI

Atbilde no AI

Go valodā, šķēle ir struktūra, kas satur trīs laukus: norādītāju uz masīvu, garumu un ietilpību. Kad šķēle tiek nodota funkcijai, tiek kopēta tikai šī struktūra, ne visa datu masīva kopija.

Tas nozīmē, ka, izsaucot funkciju, šķēle tiek nodota pēc vērtības, bet tiek kopēti tikai metadati (norādītājs, garums, ietilpība), ne paši masīva elementi. Tas nozīmē, ka funkcijas iekšienē šķēle norāda uz to pašu pamata masīvu, un izmaiņas šķēles elementos funkcijas iekšienē būs redzamas ārpusē.

Piemērs:

func modify(slice []int) {
    slice[0] = 100 // mainām pirmo elementu
}

func main() {
    s := []int{1, 2, 3}
    modify(s)
    fmt.Println(s) // izvadīs [100 2 3]
}

Tādējādi, nododot šķēli funkcijai, tiek kopēti tikai trīs šķēles struktūras lauki, bet masīva dati paliek kopīgi.