Sobes.tech
Junior — Middle

Jaká data uvnitř slice jsou předávána při volání funkce s tímto slice jako argumentem?

sobes.tech AI

Odpověď od AI

V Go je řez (slice) struktura, která obsahuje tři pole: ukazatel na pole, délku a kapacitu. Při předání řezu funkci se kopíruje pouze tato struktura, nikoli celý datový pole.

To znamená, že při volání funkce je řez předán hodnotou, ale kopírují se pouze metadata (ukazatel, délka, kapacita), nikoli samotné prvky pole. To znamená, že uvnitř funkce řez ukazuje na stejný základní pole a změny prvků řezu uvnitř funkce budou viditelné i zvenčí.

Příklad:

func modify(slice []int) {
    slice[0] = 100 // změníme první prvek
}

func main() {
    s := []int{1, 2, 3}
    modify(s)
    fmt.Println(s) // vypíše [100 2 3]
}

Tedy při předání řezu do funkce se kopírují pouze tři pole struktury řezu, zatímco data pole zůstávají sdílená.