Junior — Middle
Jaké změny nastanou se slice uvnitř funkce, pokud je předáno hodnotou a funkce provádí třídění a nevrací výsledek?
sobes.tech AI
Odpověď od AI
V jazyce Go jsou slices předávány funkcím hodnotou, ale je důležité pochopit, že hodnota slice je struktura obsahující ukazatel na pole, délku a kapacitu. Při předání slice hodnotou se kopíruje právě tato struktura, nikoli samotné data pole.
Pokud funkce setřídí slice předané hodnotou a nezpětně vrátí výsledek, změny budou viditelné i zvenčí, protože ukazatel uvnitř slice ukazuje na stejná data pole.
Příklad:
func sortSlice(s []int) {
sort.Ints(s) // setřídí slice
}
func main() {
nums := []int{3, 1, 2}
sortSlice(nums)
fmt.Println(nums) // Vypíše: [1 2 3]
}
Tím pádem, třídění uvnitř funkce změní původní pole, i když je slice předán hodnotou, protože se kopíruje pouze struktura slice, nikoli data pole.