Junior — Middle
Aké údaje vo vnútri slice sa odovzdávajú pri volaní funkcie s týmto slice-om ako argumentom?
sobes.tech AI
Odpoveď od AI
V Go je rez (slice) štruktúra, ktorá obsahuje tri polia: ukazovateľ na pole, dĺžku a kapacitu. Pri odovzdaní rezu funkcii sa kopíruje iba táto štruktúra, nie celý dátový poľ.
To znamená, že pri volaní funkcie je rez odovzdaný hodnotou, ale kopírujú sa iba metadáta (ukazovateľ, dĺžka, kapacita), nie samotné prvky poľa. To znamená, že vo vnútri funkcie rez ukazuje na ten istý základný poľ, a zmeny prvkov rezu vo vnútri funkcie budú viditeľné aj zvonku.
Príklad:
func modify(slice []int) {
slice[0] = 100 // meníme prvý prvok
}
func main() {
s := []int{1, 2, 3}
modify(s)
fmt.Println(s) // vypíše [100 2 3]
}
Týmto spôsobom, pri odovzdaní rezu do funkcie, sa kopírujú iba tri polia štruktúry rezu, zatiaľ čo dáta poľa zostávajú spoločné.