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