Sobes.tech
Junior — Middle

Ako sa v programovacom jazyku odovzdáva slice do funkcie?

sobes.tech AI

Odpoveď od AI

V jazyku Go sa slice-om sa funkciou sa odovzdáva hodnotou, ale slice obsahuje ukazovateľ na pole, ako aj jeho dĺžku a kapacitu. To znamená, že pri odovzdávaní slice do funkcie sa kopíruje štruktúra slice, ale nie dáta poľa, na ktoré ukazuje.

V dôsledku toho sa zmeny prvkov slice vo vnútri funkcie odrážajú na pôvodnom poli, ale zmena samotného slice (napríklad priradenie nového slice) neovplyvní vonkajší slice.

Príklad:

package main
import "fmt"

func modifySlice(s []int) {
    s[0] = 100       // zmení prvok pôvodného poľa
    s = append(s, 200) // zmení lokálny slice, vonkajší zostane nezmenený
}

func main() {
    s := []int{1, 2, 3}
    modifySlice(s)
    fmt.Println(s) // Vytlačí: [100 2 3]
}

Týmto spôsobom sa slice odovzdáva hodnotou, ale vďaka vnútornému ukazovateľu sú zmeny prvkov viditeľné mimo funkcie.